在开发BigZ时,主要用于数论理论实验,我发现在创建,过滤或转换集的单词集中需要正交性。我想要一些逻辑组合的词汇涵盖各种各样的命令,而不需要记住大量的单词和组合它们的方法。
1 100 condition isprime create-set
将所有素数的集合置于1到100之间的集合堆栈上,而
function 1+ transform-set
将此集转换为所有数字p + 1的集合,其中p是小于100的素数。
此外,
condition sqr filter-set
将所有完美正方形的集合留在堆栈上的p + 1表格上。
这对于自然数集很有用,但是为了能够创建,过滤和转换n元组集,我需要能够计算未命名单词中的本地人。我重新设计了一些词来表示复合条件和功能:
: ~ :noname ;
: :| postpone locals| ; immediate
1 100 ~ :| p | p is prime p 2 + isprime p 2 - isprime or and ;
1 100 ~ :| a b | a dup * b dup * + isprime ;
执行这两个例子给出了参数堆栈(1 100 xt)但是能够处理这个权利,在第一种情况下是一组数字,在第二种情况下应该产生一组对,I'我必须补充这个词:|得到(1 100 xt n)其中n是当地人使用的numbet。我认为可以使用> IN和PARSE来做到这一点,但是很久以前我做过这样的事情,所以我怀疑我现在可以做得恰到好处。
答案 0 :(得分:2)
我不理解(LOCALS),但耐心和幸运,我设法用我最初的想法做到了:
callback = options;
现在
: bl# \ ad n -- m
over + swap 0 -rot
do i c@ bl = +
loop negate ;
\ count the number of blanks in the string ad n
variable loc#
: locals# \ --
>in @ >r
[char] | parse bl# loc# !
r> >in ! ; immediate
\ count the number of locals while loading
: -| \ --
postpone locals#
postpone locals| ; immediate
\ replace LOCALS|
作为LOCALS |但是将本地数量保留在全局变量loc#。
中答案 1 :(得分:1)
也许你应该删除LOCALS|
并自己解析局部变量。对于每一个,使用其名称调用(LOCAL)
,并以传递空字符串结束。
有关详细信息,请参阅http://lars.nocrew.org/dpans/dpans13.htm#13.6.1.0086。