gpt4 book ai didi

programming-languages - 连接语言可以使用前缀表示法吗?

转载 作者:行者123 更新时间:2023-12-03 02:13:49 25 4
gpt4 key购买 nike

Concatenative languages具有一些非常有趣的特性,例如能够组合不同数量的函数以及能够分解函数的任何部分。然而,许多人对它们不屑一顾,因为它们使用后缀表示法并且难以阅读。另外,波兰人可能不喜欢人们反向使用他们精心设计的符号。

那么,是否可以有前缀表示法?如果是,需要权衡什么?

我知道它是如何工作的,但我没有连接语言的经验,所以我可能错过了一些东西。基本上,函数将以相反的顺序求值,并且以相反的顺序从堆栈中提取值。为了演示这一点,我将比较后缀和前缀。以下是一些使用传统后缀表示法的连接表达式。

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]

表达式从右到左计算,函数首先从堆栈中取出第一个参数。请注意,前缀过滤器示例读起来与其描述更加接近,并且看起来与应用样式相似。我注意到的一个问题是,将事物分解出来可能没有那么有用。例如,在后缀表示法中,您可以从 3 2 - 中分解出 2 - 以创建 subtractTwo 函数。在前缀表示法中,您可以从 - 3 2 中分解出 - 3 来创建 subtractFromThree 函数,但这似乎不太有用。

除非出现任何明显的问题,也许使用前缀表示法的连接语言可以赢得不喜欢后缀表示法的人的青睐。任何见解都值得赞赏。

最佳答案

当然,如果您的单词仍然是固定数量的,那么只需从右到左执行标记即可。

这只是因为 n 元函数的前缀表示法意味着括号,并且只是因为希望人类的“读取顺序”与执行顺序相匹配,所以作为堆栈语言意味着后缀。

关于programming-languages - 连接语言可以使用前缀表示法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9541468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com