Files
plthy/examples/pol_not_calc.plthy
2024-04-12 16:17:58 +02:00

83 lines
2.4 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|
set false -> num|
do [
do set true -> num else skip if argument #1{variable i} = variable numbers{variable j}|
set variable j + 1 -> j|
] until variable j = do len<variable numbers;>|
do skip else return false if variable num|
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 -> k|
do [
set variable k+1 -> k|
set variable n1l + {argument #1{variable k};} -> n1l|
do skip else set variable n+2 -> n if do "is_number"<argument #1{variable k};>|
] until variable n = variable k|
set {} -> n2l|
set variable n+1 -> n|
do [
set variable k+1 -> k|
set variable n2l + {argument #1{variable k};} -> n2l|
do skip else set variable n+2 -> n if do "is_number"<argument #1{variable k};>|
] until variable n = variable k|
do print<variable op;variable n1l;variable n2l;>|
set do "unfold"<variable n1l;> -> n1|
do return 'error' if do str<variable n1;>='error'|
set do "unfold"<variable n2l;> -> n2|
do return 'error' if do str<variable n1;>='error'|
do print<variable op;variable n1;variable n2;>|skip|
return do "calc"<variable op;variable n1;variable n2;>|
]|
set do input<':';> -> x|
set do "split"<variable x;> -> list|
do print<do "unfold"<variable list;>;>|
goodbye|