Reputation: 4886
8th uses namespaces instead of vocabularies. Each namespace has its own integer representation.
ok> ns:a . cr ns:n . cr
4
2
So, 2 is for the number namespace, and 4 is for arrays.
I want to construct an array holding the namespaces which I can then place at the TOS (top of stack).
However, if I just write this
ok> [ ns:a , ns:n ]
Exception: invalid JSON array: at line 1 char 3 in ....: cr (G:;;; +000004c2)
Exception: can't find: :a: at line 1 char 6 in (null): cr (G:??? +00000029)
Exception: can't find: ,: at line 1 char 8 in (null): cr (G:??? +00000029)
Exception: can't find: ]: at line 1 char 15 in (null): n (G:??? +00000029)
Upvotes: 3
Views: 161
Reputation: 106
I'm the developer of 8th. The solution with ' ns:a is not really what you want, since that puts the word in the array instead of the value that word would return.
You can accomplish what you're looking for by using the backtick: [ ` ns:a ` ]
The backtick feeds the text up to the next backtick to eval and puts the value (whatever it is) in the JSON you're creating (it's not limited to JSON, it's a general construct).
Upvotes: 5
Reputation: 4886
You can store the function address instead in the array
[ ' ns:n , ' ns:a ]
and access the values by grabbing an array value and exec it
0 a:@ w:exec . cr
2
ok>
You can also use anonymous functions
[ ( ns:a ) , ( ns:m ) ]
Upvotes: 2