在 FORTH 中重写 a**2 + ab + c
Rewriting a**2 + ab + c in FORTH
第 2 章第 4 题 Starting FORTH (online here) 要求你为
写一个定义
a**2 + ab + c ( c a b -- result )
答案是
: 2-4 OVER + * + ;
情况如何,假设a=1,b=2,c=3
3 1 2 ok
OVER .s <4> 3 1 2 1 ok
+ .s <3> 3 1 3 ok
* .s <2> 3 3 ok
+ .s <1> 6 ok
之所以有效,是因为正如评论中所述,我 math-stupid。
我看到了
OVER .s <4> 3 1 2 1 ok
+ .s <3> 3 1 3 ok
并被抛出一个循环。问题是
a**2 + ab + c ( c a b -- result )
与
相同
a(a+b) + c ( c a b -- result )
与
相同
c + a(a+b) ( c a b -- result )
这基本上就是他们正在做的事情。他们稍微移动了表格
c + a(a+b)
c + a(b+a)
你看到在堆栈中,它被重新排列成这样...
c a b
c a b a -- after over
然后他们就运行
c a b a + * +
聪明,感谢 Mateusz Piotrowski 在评论中指出。
第 2 章第 4 题 Starting FORTH (online here) 要求你为
写一个定义a**2 + ab + c ( c a b -- result )
答案是
: 2-4 OVER + * + ;
情况如何,假设a=1,b=2,c=3
3 1 2 ok
OVER .s <4> 3 1 2 1 ok
+ .s <3> 3 1 3 ok
* .s <2> 3 3 ok
+ .s <1> 6 ok
之所以有效,是因为正如评论中所述,我 math-stupid。
我看到了
OVER .s <4> 3 1 2 1 ok
+ .s <3> 3 1 3 ok
并被抛出一个循环。问题是
a**2 + ab + c ( c a b -- result )
与
相同a(a+b) + c ( c a b -- result )
与
相同c + a(a+b) ( c a b -- result )
这基本上就是他们正在做的事情。他们稍微移动了表格
c + a(a+b)
c + a(b+a)
你看到在堆栈中,它被重新排列成这样...
c a b
c a b a -- after over
然后他们就运行
c a b a + * +
聪明,感谢 Mateusz Piotrowski 在评论中指出。