|:: print? :string: '%d'| :: print a number |:: print? :string: '%b'| :: print a number :base: 2 |:: print? :string: '%x'| :: print a number :base: 16 |:: print? :string: '%s'| :: print a string |:: print? :string: '{}'| :: print an argument |:: print? :string: '\n'| :string: 10 |:: print? :string: '\t'| :string: 9 |:: print? :string: '\r'| :string: 13 |:: print? :string: '\0'| :string: 0 |:: print? :string: $ | :@stdio: write $ |:: print :string: | |:: print | |:: print an argument :arguments: string| :: print a string |:: print an argument :arguments: number| :: print a number |:: print an argument :arguments: | |:: print an argument :arguments: $ | :: error -- unknown argument type $ |:: print a number| :: convert an argument to a string :: print an argument |:: print a string? :arguments: $|:@stdio: write $ |:: print a string :arguments: | |:: print a string | |:: convert an argument to a string :arguments: 0| :arguments: string :arguments: '0' :arguments: |:: convert an argument to a string :arguments: $| :: break $ into digits :: make those digits printable :: push a separator to the arguments stack :: move those digits to the arguments stack :: set the argument type to string |:: break 0 into digits :base: $| |:: break $number into digits :@rpn.stack: ($next $digit)| :digits: $digit :: break $next into digits |:: break $number into digits? :base: $base?| :@rpn: ($number $base % $number $base /) |:: break $number into digits?| :base: 10 |:: make those digits printable? :@rpn.stack: $| :printable digits: $ |:: make those digits printable? :digits: $| :@rpn: ($ 48 +) |:: make those digits printable | |:: push a separator to the arguments stack| :arguments: |:: move those digits to the arguments stack? :printable digits: $| :arguments: $ |:: move those digits to the arguments stack | |:: set the argument type to $| :arguments: $ ||:: print :string: "%d, and a %d, and a %d, %d, %d, %d...!\n" :arguments: (1 2 1 2 3 4) :string: