如何在一个因子中多维数字?

时间:2016-10-03 15:58:03

标签: factor-lang

我正在玩因素试图对连接编程有一点了解。写一个单词来表示数字是微不足道的:

: square ( n -- n ) dup * ;

但是对于我的生活,我似乎无法弄清楚如何将数字立方体化:

: cube ( n -- n ) * * ;  ! Form a

不起作用,因为推断的堆栈效果是( x x x -- x )类似

: cube ( n -- n ) dup * * ; ! Form b

也失败了。

如果我要对立方体进行硬编码,我会做这样的事情:

3 3 * 3 *

这就是为什么我的天真猜测会形成b。

正如我所说,我只是在玩因素而且很想知道我在这里缺少什么 - 但这主要是出于我的好奇心。

3 个答案:

答案 0 :(得分:3)

如果其他人遇到这种情况并希望知道如何执行此操作:

: cube ( n -- n ) dup dup * * ;

dup dup会将值添加到堆栈顶部两次,然后* *将乘以两次。我打赌这样做的方式不那么简单,但正如我所说的,万一其他人都很好奇。

答案 1 :(得分:3)

有一个内置词:

IN: scratchpad 3 3 ^ .
27

或者如果你想自己写下这个词:

: pow ( x n -- y ) 1 - over '[ _ * ] times ;
IN: scratchpad 5 3 pow .
125

您还可以使用cube

制定square
: cube ( n -- n' ) dup square * ;
IN: scratchpad 6 cube .
216

答案 2 :(得分:3)

这可能对你很有意思:

: double ( n -- n ) dup + ;   ! add 2 times
: square ( n -- n ) dup * ;   ! multiply 2 times

那么3次呢?

: triple ( n -- n ) dup dup + + ;   ! add 3 times
: cube   ( n -- n ) dup dup * * ;   ! multiply 3 times

(我想知道是否有办法概括模式[..a a a b b b..]

下一个higher order operation怎么样:Tetration:

: tetrate2 ( n -- n ) dup ^ ;         ! raise to power twice
: tetrate3 ( n -- n ) dup dup ^ ^ ;   ! raise to power thrice

你可能也可以概括另一种方式,实现像Knuth的向上箭头那样的超级操作。 我不会立即明白如何做到这一点, 但Björn的答案似乎暗示了它。 实际的源代码有很多针对不同数据类型进行优化的抽象层。 单击直到达到(^fixnum)会给出类似的内容