300 lines
5.4 KiB
Plaintext
300 lines
5.4 KiB
Plaintext
% Missing core words:
|
|
% bind
|
|
% break
|
|
% catch
|
|
% catch-error
|
|
% echo
|
|
% eput
|
|
% resetinterpreter
|
|
% throw
|
|
% tokenformat
|
|
% tokensize
|
|
% type
|
|
|
|
"Literals" print
|
|
|
|
[] [] test
|
|
[-10] [-10] test
|
|
[10] [+10] test
|
|
[10.5] [10.5] test
|
|
[10.5] [+10.5] test
|
|
[-10.5] [-10.5] test
|
|
[1000000.0] [10e5] test
|
|
[1000000.0] [+10e5] test
|
|
[-1000000.0] [-10e5] test
|
|
[1050000.0] [10.5e5] test
|
|
[1050000.0] [+10.5e5] test
|
|
[-1050000.0] [-10.5e5] test
|
|
[(1,2)][(1,2)] test
|
|
[(1,2,3)][(1,2,3)] test
|
|
["Hello"] ["Hello"] test
|
|
|
|
[1] [{useregs} length] test
|
|
|
|
"Stack shuffling" print
|
|
|
|
[1] [1 2 pop] test
|
|
[1 2 ] [1 2 3 8 2 pops] test
|
|
[2 1] [1 2 exch] test
|
|
["a""b""c""d""d"] ["a""b""c""d" 0 index] test
|
|
["a""b""c""d""a"] ["a""b""c""d" 3 index] test
|
|
[0 2 3 1][0 1 2 3 3 -1 roll] test
|
|
[0 3 1 2][0 1 2 3 3 1 roll] test
|
|
[0 1 2 3][0 1 2 3 3 0 roll] test
|
|
[3 0 1 2][0 1 2 3 4 1 roll] test
|
|
[1 2 3 0][0 1 2 3 4 -1 roll] test
|
|
["a" "b" "c" ["g"]] ["a" "b" "c" ["d" "e" "f" cleartomark "g"]] test
|
|
["d" "e" "f" "g" 4] ["d" "e" "f" "g" counttomark] test
|
|
|
|
"Arrays" print
|
|
|
|
[[1 2 "X"]] [1 2 "X" 3 array] test
|
|
[-10] [[1 2 -10] 2 get] test
|
|
[-10] [[1 2 -10] -1 get] test
|
|
[[1 2 4]] [[1 2 -10] dup 2 4 put] test
|
|
[[1 "X" -10]] [[1 2 -10] dup -2 "X" put] test
|
|
[["a" "b" "c" "d"]] [["a" "b"] ["c" "d"] arrayappend] test
|
|
[["a" "b" 100]] [["a" "b"] 100 append] test
|
|
[{"a" "b" 100}] [{"a" "b"} 100 append] test
|
|
[["a" "b" "c"]] [["a" "b" "c" "d" "e"] 2 pop-back] test
|
|
[{"a" "b" "c"}] [{"a" "b" "c" "d" "e"} 2 pop-back] test
|
|
[["a" "b" "c" "d" "e"]] [["a" "b" "c" "d" "e"] 0 pop-back] test
|
|
[{"a" "b" "c" "d" "e"}] [{"a" "b" "c" "d" "e"} 0 pop-back] test
|
|
[["a" "b" "c" "d"]] [["a" "b" "c" "d" "e"] pop-back] test
|
|
[{"a" "b" "c" "d"}] [{"a" "b" "c" "d" "e"} pop-back] test
|
|
[["c" "d" "e"]] [["a" "b" "c" "d" "e"] 2 pop-front] test
|
|
[{"c" "d" "e"}] [{"a" "b" "c" "d" "e"} 2 pop-front] test
|
|
[["a" "b" "c" "d" "e"]] [["a" "b" "c" "d" "e"] 0 pop-front] test
|
|
[{"a" "b" "c" "d" "e"}] [{"a" "b" "c" "d" "e"} 0 pop-front] test
|
|
[["b" "c" "d" "e"]] [["a" "b" "c" "d" "e"] pop-front] test
|
|
[{"b" "c" "d" "e"}] [{"a" "b" "c" "d" "e"} pop-front] test
|
|
["Boo" 1 2 3] ["Boo" [1 2 3] aload] test
|
|
[4] [["a" "b" "c" "d"] length] test
|
|
[[3 2 1 2 2]] [[1 2 3] [5 1 0 1 1] array-get] test
|
|
[[1 2 4 5 6]] [[1 2 3 4 5 6] 2 arrayremove] test
|
|
[[1 2 3 4 6]] [[1 2 3 4 5 6] -2 arrayremove] test
|
|
[[1 "hallo" 2 3 4]] [[1 ["hallo" 2] 3 [4] []] flatten] test
|
|
[[1 2 [3]]] [[1 [2 [3]]] flatten] test
|
|
[[16.2 33.5 49.0 64.3 80.5]] [[80.5 64.3 49.0 33.5 16.2] reverse] test
|
|
[[ 3 4 5 1 2 3 4 5 1 2 ]] [[ 1 2 3 4 5 ] -3 7 slice] test
|
|
[[ "c" "d" "e" ]] [[ "a" "b" "c" "d" "e" "f" "g" ] 3 2 subarray] test
|
|
|
|
[
|
|
[2 1 6] %A(rray)
|
|
[2 0 1] %P(ermutation)
|
|
1
|
|
]
|
|
[
|
|
[ 2 1 6 ]
|
|
dup
|
|
sort-number-permutation
|
|
dup
|
|
2 %index of the first element in p
|
|
get %get the first element of P
|
|
] test
|
|
|
|
"Dictionaries" print
|
|
|
|
[3 4] [
|
|
/x 4 def
|
|
dict begin
|
|
/x 3 def
|
|
x
|
|
end
|
|
x
|
|
] test
|
|
|
|
[3 4] [
|
|
/x 4 def
|
|
dict begin
|
|
/x 3 def
|
|
currentdict /x get
|
|
end
|
|
currentdict /x get
|
|
] test
|
|
|
|
dict begin
|
|
/squared {dup mul} def
|
|
[25] [5 squared] test
|
|
[{dup mul}] [/squared load] test
|
|
end
|
|
|
|
[3 4] [
|
|
/x 4 def
|
|
dict begin
|
|
/x 3 def
|
|
x
|
|
/x undef
|
|
x
|
|
end
|
|
] test
|
|
|
|
dict begin
|
|
|
|
/mydict dict def
|
|
mydict /total 0 put
|
|
[1] [mydict /total known] test
|
|
[0] [mydict /badname known] test
|
|
|
|
end
|
|
|
|
dict begin
|
|
/myBlack (0.0,0.0,0.0) def
|
|
|
|
[1] [currentdict /myBlack known] test
|
|
[0] [currentdict /myWhite known] test
|
|
end
|
|
|
|
dict begin
|
|
/bing 5 def
|
|
/bong "OH HAI" def
|
|
|
|
dict begin
|
|
/bong 10 def
|
|
|
|
[1 "OH HAI"] [/bing where exch /bong get] test
|
|
|
|
end
|
|
end
|
|
|
|
[3 3] [
|
|
/d dict def
|
|
d /x 3 put
|
|
d /x get
|
|
d copy /x 100 put
|
|
d /x get
|
|
] test
|
|
|
|
[5] [
|
|
dict begin
|
|
/a 1 def
|
|
/b 2 def
|
|
/c 3 def
|
|
/d 4 def
|
|
/e 5 def
|
|
currentdict keys length
|
|
end
|
|
] test
|
|
|
|
[/a 10 /b 20 /c 30] dictfromarray begin
|
|
[10] [a] test
|
|
[20] [b] test
|
|
[30] [c] test
|
|
end
|
|
|
|
dict dup
|
|
[/a 10 /b 20 /c 30] exch dictfromarray begin
|
|
[10] [a] test
|
|
[20] [b] test
|
|
[30] [c] test
|
|
end
|
|
|
|
% Ensure original was mutated too!
|
|
begin
|
|
[10] [a] test
|
|
[20] [b] test
|
|
[30] [c] test
|
|
end
|
|
|
|
"Pathnames" print
|
|
["Barak"] [
|
|
dict dup begin
|
|
dict dup /name exch def
|
|
begin
|
|
/first "Barak" def
|
|
/last "Obama" def
|
|
end
|
|
end
|
|
.name.first
|
|
] test
|
|
|
|
"Control flow" print
|
|
|
|
["Yes"] [1 {"Yes"} if] test
|
|
[] [0 {"Yes"} if] test
|
|
|
|
["Yes"] [1 {"Yes"} {"No"} ifelse] test
|
|
["No"] [0 {"Yes"} {"No"} ifelse] test
|
|
|
|
[1 2 4 8 16] [1 {dup 2 mul dup 16 ge {exit} if} loop] test
|
|
|
|
[["A" "A" "A" "A" "A" "A" "A" "A"]] [["A"] 3 {dup arrayappend} repeat] test
|
|
|
|
[2 6 10 14 18 22 26 30 34 38] [1 2 19 {2 mul} for] test
|
|
[2 6 10 14 18 22 26 30 34] [1 2 19 {2 mul} forx] test
|
|
|
|
[2 6 10 14] [1 2 7 {2 mul} for] test
|
|
[3 7 11 15] [[1 2 7 {2 mul} for] {1 add} forall] test
|
|
[[3 7 11 15]] [[1 2 7 {2 mul} for] {1 add} map] test
|
|
|
|
[ 10.1 9 8 7 6 5 4 3 2 ]
|
|
[
|
|
[ 1.1 2 3 4 5 6 7 8 9 ]
|
|
[ 9 7 5 3 1 -1 -3 -5 -7 ]
|
|
{ add } twoforall
|
|
] test
|
|
|
|
[ -7.9 -5 -2 1 4 7 10 13 16 ]
|
|
[
|
|
[ 1.1 2 3 4 5 6 7 8 9 ]
|
|
[ 9 7 5 3 1 -1 -3 -5 -7 ]
|
|
{ sub } twoforall
|
|
] test
|
|
|
|
[[10.1 9 8 7 6 5 4 3 2]]
|
|
[
|
|
[ 1.1 2 3 4 5 6 7 8 9 ]
|
|
[ 9 7 5 3 1 -1 -3 -5 -7 ]
|
|
{ add } twomap
|
|
] test
|
|
|
|
[/x] [/x /y 0 ifpop] test
|
|
[/y] [/x /y 1 ifpop] test
|
|
|
|
"Registers" print
|
|
[2 1] [1 2 {usereg !b !a ;b ;a} exec] test
|
|
|
|
[100] [
|
|
{
|
|
usereg
|
|
{dup mul} !squared
|
|
10 !x
|
|
|
|
:x :squared
|
|
} exec
|
|
] test
|
|
|
|
% Ghetto closures
|
|
[6] [
|
|
/closure-test {
|
|
usereg
|
|
|
|
5 !x
|
|
|
|
{:x 1 add !x} exec
|
|
|
|
:x
|
|
} def
|
|
closure-test
|
|
] test
|
|
|
|
[8] [
|
|
/closure-test {
|
|
usereg
|
|
|
|
5 !x
|
|
|
|
{:x 1 add !x}
|
|
|
|
7 !x
|
|
|
|
exec
|
|
|
|
:x
|
|
} def
|
|
closure-test
|
|
] test
|
|
|
|
"Make sure nothing is left on the stack after the test" print
|
|
count [exch] [0] test
|