【问题标题】:Examples of Custom Control Flow Compiling Words自定义控制流编译词示例
【发布时间】:2017-06-30 17:31:34
【问题描述】:

Forth 著名地允许用户通过为控制流定义新词来改变语言(超出标准给出的词:DO、LOOP、BEGIN、UNTIL、WHILE、REPEAT、LEAVE IF、THEN、ELSE、CASE、ENDCASE 等) .)

是否存在人们实际创建自己的新控制流词的常见示例?有哪些典型和有用的例子?还是标准已经定义了人们真正需要的一切?

我希望找到一些有用的语言扩展示例,这些示例已被接受或被证明通常有助于使语言更具表现力。

【问题讨论】:

    标签: compilation control-flow forth gforth immediate-mode


    【解决方案1】:

    Forth 中控制流结构的另一大方向是回溯。这是非常有表现力和强大的机制。要实现,它需要返回地址操作 [Gas99]。

    Forth 中的回溯是 M.L.Gassananko 在 1988-1990 年开发的 BacFORTH 扩展。第一篇关于这个主题的论文是用俄语写的。

    回溯技术使人们能够创建抽象迭代器 和过滤器模块负责查看所有可能的集合 价值观并拒绝“不正当”的价值观 [Gas96b]。

    有关一些介绍,请参阅简短描述:Backtracking (by mlg),comp.lang.forth 中的multi-threading in 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
    

    PROCONT 是特殊的控制流字。 PRO 指定生成词,CONT 调用消费者——它类似于 Ruby 或 ECMAScript 中的 yield。 BacFORTH 中还定义了许多其他特殊词。 您可以在 SP-Forth 中使用 BacFORTH(只需包含 ~profit/lib/bac4th.f 库)。

    词源

    一般来说,backtracking 只是一种寻找解决方案的算法。在 Prolog 中,这个算法被嵌入在底层,所以backtracking in Prolog 是它自己工作的过程。 BacFORTH 中的回溯是由一组特殊的控制流字支持的编程技术。

    参考文献

    【讨论】:

    • 谢谢。这令人大开眼界。你知道延续、协程和有限状态机是否也很容易实现?
    • 您能否详细说明什么是回溯(对于未来的读者)?
    • @PeterMortensen 我添加了一些信息和链接,请让我知道是否有更多详细信息。
    【解决方案2】:

    这是一个例子。 CASE 是对 Forth 控制流字集的较晚添加。 1980 年初,Forth Dimensions 宣布了定义最佳 CASE 语句的竞赛。那年晚些时候,三项参赛作品打成平手。其中之一最终出现在 Forth94 标准中。

    【讨论】:

    • 据我所知,CATCH 和 THROW 在成为标准之前也作为用户定义的控制结构存在
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 2012-07-27
    • 1970-01-01
    • 2015-06-25
    • 2015-02-03
    • 2019-03-18
    • 2021-03-31
    相关资源
    最近更新 更多