自定义控制流编译语句示例
Examples of Custom Control Flow Compiling Words
Forth 以允许用户通过为控制流定义新词来改变语言而闻名(除了标准给出的词:DO、LOOP、BEGIN、UNTIL、WHILE、REPEAT、LEAVE IF、THEN、ELSE、CASE、ENDCASE等)
是否有人们实际创建自己的新控制流词的常见示例?有哪些典型和有用的例子?还是标准已经定义了人们实际需要的一切?
我希望找到有用的语言扩展示例,这些扩展已经获得认可或被证明通常有助于使语言更具表现力。
这是一个例子。 CASE
是对 Forth 控制流字集的一个有点晚的添加。 1980 年初,Forth Dimensions 宣布了一项定义最佳 CASE 语句的竞赛。那年晚些时候,三项参赛作品之间的平局得以解决。其中之一最终出现在 Forth94 标准中。
Forth 中控制流结构的另一个重要方向是回溯。这是一个非常有表现力和强大的机制。要实现,它需要 return 地址操作 [Gas99]。
Forth 中的回溯是由 M.L.Gassananko 在 ~1988-1990 年作为 BacFORTH 扩展开发的。关于这个主题的第一篇论文是俄语的。
回溯技术可以创建抽象迭代器
和过滤器模块负责查看所有可能的集合
值并拒绝 "undue" 个 [Gas96b].
有关介绍,请参阅简短说明:Backtracking (by mlg), also the 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
调用消费者——类似于 Ruby 或 ECMAScript 中的 yield
。 BacFORTH 中还定义了一些其他的特殊词。
您可以在 SP-Forth 中使用 BacFORTH(只需包含 ~profit/lib/bac4th.f
库)。
词源
一般来说,backtracking is just an algorithm for finding solutions. In Prolog this algorithm was embedded under the hood, so backtracking in Prolog 是它自己运作的过程。 BacFORTH 中的回溯是一种由一组特殊控制流字支持的编程技术。
参考资料
- [Gas96a]M.L。加萨年科,Formalization of Backtracking in Forth, 1996 (mirror)
- [Gas96b]M.L。加萨年科,Enhancing the Capabilities of Backtracking, 1996 (mirror)
- [Gas99]M.L。加萨年科,The Open Interpreter Word Set,1999
Forth 以允许用户通过为控制流定义新词来改变语言而闻名(除了标准给出的词:DO、LOOP、BEGIN、UNTIL、WHILE、REPEAT、LEAVE IF、THEN、ELSE、CASE、ENDCASE等)
是否有人们实际创建自己的新控制流词的常见示例?有哪些典型和有用的例子?还是标准已经定义了人们实际需要的一切?
我希望找到有用的语言扩展示例,这些扩展已经获得认可或被证明通常有助于使语言更具表现力。
这是一个例子。 CASE
是对 Forth 控制流字集的一个有点晚的添加。 1980 年初,Forth Dimensions 宣布了一项定义最佳 CASE 语句的竞赛。那年晚些时候,三项参赛作品之间的平局得以解决。其中之一最终出现在 Forth94 标准中。
Forth 中控制流结构的另一个重要方向是回溯。这是一个非常有表现力和强大的机制。要实现,它需要 return 地址操作 [Gas99]。
Forth 中的回溯是由 M.L.Gassananko 在 ~1988-1990 年作为 BacFORTH 扩展开发的。关于这个主题的第一篇论文是俄语的。
回溯技术可以创建抽象迭代器 和过滤器模块负责查看所有可能的集合 值并拒绝 "undue" 个 [Gas96b].
有关介绍,请参阅简短说明:Backtracking (by mlg), also the 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
调用消费者——类似于 Ruby 或 ECMAScript 中的 yield
。 BacFORTH 中还定义了一些其他的特殊词。
您可以在 SP-Forth 中使用 BacFORTH(只需包含 ~profit/lib/bac4th.f
库)。
词源
一般来说,backtracking is just an algorithm for finding solutions. In Prolog this algorithm was embedded under the hood, so backtracking in Prolog 是它自己运作的过程。 BacFORTH 中的回溯是一种由一组特殊控制流字支持的编程技术。
参考资料
- [Gas96a]M.L。加萨年科,Formalization of Backtracking in Forth, 1996 (mirror)
- [Gas96b]M.L。加萨年科,Enhancing the Capabilities of Backtracking, 1996 (mirror)
- [Gas99]M.L。加萨年科,The Open Interpreter Word Set,1999