63 lines
1.7 KiB
Plaintext
63 lines
1.7 KiB
Plaintext
hello|
|
|
define split<1> as [
|
|
set {} -> list|
|
|
set '' -> word|
|
|
set 0 -> i|
|
|
do [
|
|
do [
|
|
set variable list + {variable word;} -> list|
|
|
set '' -> word|
|
|
] else [
|
|
set variable word + argument #1{variable i} -> word|
|
|
] if argument #1{variable i} = ' '|
|
|
set variable i + 1 -> i|
|
|
] until variable i = do len<argument #1;>|
|
|
do skip else set variable list + {variable word;} -> list if variable word = ''|
|
|
return variable list|
|
|
]|
|
|
|
|
define is_number<1> as [
|
|
set '0123456789' -> numbers|
|
|
set 0 -> i|
|
|
do [
|
|
set 0 -> j|
|
|
do [
|
|
do skip else return false if argument #1{variable i} = variable numbers{variable j}|
|
|
set variable j + 1 -> j|
|
|
] until variable j = do len<variable numbers;>|
|
|
set variable i + 1 -> i|
|
|
] until variable i = do len<argument #1;>|
|
|
return true|
|
|
]|
|
|
|
|
define calc<3> as [
|
|
do return argument #2 + argument #3 if argument #1 = '+'|
|
|
return 'error'|
|
|
]|
|
|
|
|
define unfold<1> as [
|
|
// In case there are 0, 1 or 2 arguments
|
|
do return 'error' if do len<argument #1;> = 0|
|
|
do [
|
|
do return do int<argument #1{0};> if do "is_number"<argument #1;>|
|
|
return 'error'|
|
|
] if do len<argument #1;> = 1|
|
|
do return 'error' if do len<argument #1;> = 2|
|
|
|
|
set argument #1{0} -> op|
|
|
|
|
set {} -> n1l|
|
|
set 1 -> n|
|
|
set 0 -> i|
|
|
do [
|
|
set variable i+1 -> i|
|
|
set variable n1l + {argument #1{variable i};} -> n1l|
|
|
do skip else set variable n+2 -> n if do "is_number"<argument #1{variable i};>|
|
|
] until variable n = variable i|
|
|
do print<variable n1l;>|
|
|
]|
|
|
|
|
set do input<':';> -> x|
|
|
set do "split"<variable x;> -> list|
|
|
do print<do "unfold"<variable list;>;>|
|
|
goodbye| |