级联语言有一些非常有趣的特性,例如能够组合不同数量的函数,并且能够分解出函数的任何部分。然而,许多人不屑一顾,因为它们使用了后缀表示法,而且很难阅读。另外,波兰人可能不喜欢人们倒着使用他们精心制作的符号。
那么,是否可以有前缀符号?如果是,那么权衡是什么?
我知道它是如何工作的,但我对连接语言没有经验,所以我可能遗漏了一些东西。基本上,一个函数将以相反的顺序被评估,而值将从堆栈中以相反的顺序被拉出。为了证明这一点,我将比较后缀和前缀的样子。以下是一些使用传统后缀表示法的连接表达式。
5 dup * ! Multiply 5 by itself
3 2 - ! Subtract 2 from 3
(1, 2, 3, 4, 5) [2 >] filter length ! Get the number of integers from 1 to 5
! that are greater than 2
表达式从左到右计算:在第一个示例中,5
被压入堆栈,然后dup
复制堆栈顶部的值,然后将堆栈*
顶部的两个值相乘。函数首先从堆栈中提取最后一个参数:在第二个示例中,-
调用时2
位于堆栈顶部,但它是最后一个参数。
这是我认为前缀表示法的样子:
* dup 5
- 3 2
length filter (1, 2, 3, 4, 5) [< 2]
表达式从右到左求值,函数首先从堆栈中提取它们的第一个参数。请注意前缀过滤器示例如何与其描述更接近,并且看起来与应用样式相似。我注意到的一个问题是考虑因素可能没有那么有用。例如,在后缀表示法中,您可以2 -
从中分解3 2 -
以创建减法函数。在前缀表示法中,您可以从中分解- 3
以- 3 2
创建一个subtractFromThree 函数,这似乎没有那么有用。
除非有任何明显的问题,否则使用前缀表示法的连接语言可能会赢得不喜欢后缀表示法的人的青睐。任何见解都值得赞赏。