如何对一个数进行因数立方?
How To Cube A Number In Factor?
我正在玩 Factor 试图对连接编程有一点了解。写一个词来平方一个数字是微不足道的:
: square ( n -- n ) dup * ;
但对于我来说,我似乎无法弄清楚如何计算一个数的立方:
: cube ( n -- n ) * * ; ! Form a
不起作用,因为推断的叠加效果是( x x x -- x )
类似
: cube ( n -- n ) dup * * ; ! Form b
也失败了。
如果我要对立方体进行硬编码,我会这样做:
3 3 * 3 *
这就是为什么我天真的猜测是形式 b。
正如我所说,我只是在玩 Factor,很想知道我在这里遗漏了什么——但这主要是出于我的好奇心。
以防其他人遇到此问题并想知道如何执行此操作:
: cube ( n -- n ) dup dup * * ;
dup dup
会将值加到栈顶两次,然后* *
会相乘两次。我敢打赌,有一种更简单的方法可以做到这一点,但正如我所说,以防其他人好奇。
有一个内置词:
IN: scratchpad 3 3 ^ .
27
或者如果你想自己写这个词:
: pow ( x n -- y ) 1 - over '[ _ * ] times ;
IN: scratchpad 5 3 pow .
125
您也可以使用 square
:
来表示 cube
: cube ( n -- n' ) dup square * ;
IN: scratchpad 6 cube .
216
您可能对此感兴趣:
: 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)
会给出类似的结果
我正在玩 Factor 试图对连接编程有一点了解。写一个词来平方一个数字是微不足道的:
: square ( n -- n ) dup * ;
但对于我来说,我似乎无法弄清楚如何计算一个数的立方:
: cube ( n -- n ) * * ; ! Form a
不起作用,因为推断的叠加效果是( x x x -- x )
类似
: cube ( n -- n ) dup * * ; ! Form b
也失败了。
如果我要对立方体进行硬编码,我会这样做:
3 3 * 3 *
这就是为什么我天真的猜测是形式 b。
正如我所说,我只是在玩 Factor,很想知道我在这里遗漏了什么——但这主要是出于我的好奇心。
以防其他人遇到此问题并想知道如何执行此操作:
: cube ( n -- n ) dup dup * * ;
dup dup
会将值加到栈顶两次,然后* *
会相乘两次。我敢打赌,有一种更简单的方法可以做到这一点,但正如我所说,以防其他人好奇。
有一个内置词:
IN: scratchpad 3 3 ^ .
27
或者如果你想自己写这个词:
: pow ( x n -- y ) 1 - over '[ _ * ] times ;
IN: scratchpad 5 3 pow .
125
您也可以使用 square
:
cube
: cube ( n -- n' ) dup square * ;
IN: scratchpad 6 cube .
216
您可能对此感兴趣:
: 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)
会给出类似的结果