Последняя активность 1 month ago

Supports custom formatting by adding additional rules. (Runs in Serpens.)

print.nv Исходник Playground
1|:: print? :string: '%d'| :: print a number
2|:: print? :string: '%b'| :: print a number :base: 2
3|:: print? :string: '%x'| :: print a number :base: 16
4|:: print? :string: '%s'| :: print a string
5|:: print? :string: '{}'| :: print an argument
6|:: print? :string: '\n'| :string: 10
7|:: print? :string: '\t'| :string: 9
8|:: print? :string: '\r'| :string: 13
9|:: print? :string: '\0'| :string: 0
10|:: print? :string: $ | :@stdio: write $
11|:: print :string: |
12|:: print |
13
14|:: print an argument :arguments: string| :: print a string
15|:: print an argument :arguments: number| :: print a number
16|:: print an argument :arguments: |
17|:: print an argument :arguments: $ | :: error -- unknown argument type $
18
19|:: print a number|
20 :: convert an argument to a string
21 :: print an argument
22
23|:: print a string? :arguments: $|:@stdio: write $
24|:: print a string :arguments: |
25|:: print a string |
26
27|:: convert an argument to a string :arguments: 0|
28 :arguments: string :arguments:
29 '0'
30 :arguments:
31|:: convert an argument to a string :arguments: $|
32 :: break $ into digits
33 :: make those digits printable
34 :: push a separator to the arguments stack
35 :: move those digits to the arguments stack
36 :: set the argument type to string
37
38|:: break 0 into digits :base: $|
39|:: break $number into digits :@rpn.stack: ($next $digit)|
40 :digits: $digit
41 :: break $next into digits
42|:: break $number into digits? :base: $base?|
43 :@rpn: ($number $base % $number $base /)
44|:: break $number into digits?|
45 :base: 10
46
47|:: make those digits printable? :@rpn.stack: $| :printable digits: $
48|:: make those digits printable? :digits: $| :@rpn: ($ 48 +)
49|:: make those digits printable |
50
51|:: push a separator to the arguments stack| :arguments:
52
53|:: move those digits to the arguments stack? :printable digits: $| :arguments: $
54|:: move those digits to the arguments stack |
55
56|:: set the argument type to $| :arguments: $
57
58||:: print :string:
59 "%d, and a %d, and a %d, %d, %d, %d...!\n" :arguments: (1 2 1 2 3 4)
60:string: