在Lux语言简介中,我们阅读:
与大多数其他lisps不同,Lux宏是一元的。这种
(Lux a)
类型是Compiler
通过宏实例化线程来负责任地实现的一种类型。宏必须具有Macro
类型,然后将其声明为宏。
现在,我认为这意味着在编译时可以使用其他类型检查信息,从而为您提供有关代码正确性的一些反馈。
但是,关于在编译时可以找到的宏,什么可能是不正确的呢?
我的问题是:如果Lisp中的宏是Monadic,那是什么意思?
从粗略的眼光看,Lux中的“普通”宏和阅读器宏似乎都是一元的。
对于普通宏,它们正在Compiler
通过一种类型的状态。各种宏操作(我想gensym
ing就是一个明显的例子)都需要更改此内部状态,因为它们依赖于有状态的影响,例如维护下一个可用的新原子。线程状态(即看起来像函数,s -> (a, s)
将初始状态作为参数并返回更新后的状态和结果)表现出明显的单子结构,即,给定一些第一步s -> (a, s)
,选择下一步s -> (b, s)
可以取决于查看中间结果a
。
对于阅读器宏,这是一个相似的故事,除了所讨论的影响是输入的消耗。一元解析器是一种允许先前消耗的输入影响后续输入解析方式的解析器。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句