Forth 著名地允许用户通过为控制流定义新词来改变语言(超出标准给出的词:DO、LOOP、BEGIN、UNTIL、WHILE、REPEAT、LEAVE IF、THEN、ELSE、CASE、ENDCASE 等)
是否有人们实际创建自己的新控制流词的常见示例?有哪些典型和有用的例子?还是标准已经定义了人们实际需要的一切?
我希望找到一些有用的语言扩展的例子,这些扩展已经被接受或被证明通常有助于使语言更具表现力。
最佳答案
Forth 中控制流结构的另一大方向是。回溯 .这是非常有表现力和强大的机制。要实现,它需要返回地址操作 [Gas99]。
Forth 中的回溯是 M.L.Gassananko 在 1988-1990 年开发的 BacFORTH 扩展。第一篇关于这个主题的论文是用俄语写的。
回溯技术使人们能够创建抽象迭代器
和过滤器模块负责查看所有可能的集合
值(value)观并拒绝“不正当”的值(value)观 [Gas96b]。
一些介绍见简短描述:Backtracking (by mlg) ,也是 multi-threading in Forth? comp.lang.forth 中的讨论可能很有用(请参阅来自 Gassanenko 的消息)。
只是 BacFORTH 中生成器的一个示例:
: (0-2)=> PRO 3 0 DO I CONT LOOP ; \ generator
: test (0-2)=> CR . ." : " (0-2)=> . ;
test CR
输出:
0 : 0 1 2
1 : 0 1 2
2 : 0 1 2
PRO
和 CONT
是特殊的控制流字。 PRO
指定生成词,CONT
调用消费者——类似于 yield
在 Ruby 或 ECMAScript 中。 BacFORTH 中还定义了许多其他特殊词。您可以在 SP-Forth 中使用 BacFORTH(仅包括
~profit/lib/bac4th.f
库)。词源
一般情况下,backtracking只是一种寻找解决方案的算法。在 Prolog 中,这个算法被嵌入到底层,所以 backtracking in Prolog是它自己如何运作的过程。 BacFORTH 中的回溯是由一组特殊控制流字支持的编程技术。
引用
关于compilation - 自定义控制流编译词示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44852055/