在我们阅读的Lux Language introduction中:
与大多数其他lisps不同,Lux宏是monadic。
(Lux a)
类型是通过宏线程化Compiler
实例来负责魔术的类型。宏必须具有Macro
类型,然后声明为宏。
现在我假设这意味着在编译时可以获得其他类型检查信息,从而为您提供有关代码正确性的一些反馈。
但是在编译时你可以找到的宏可能是不正确的?
我的问题是:如果Lisp中的宏是monadic是什么意思?
答案 0 :(得分:0)
从粗略的一瞥看,似乎正常"正常"宏和阅读器宏在Lux中是monadic。
对于普通宏,它们正在穿过类型为Compiler
的状态。各种宏操作(我想gensym
将是一个明显的例子)需要改变这个内部状态,因为它们依赖于有状态的效果,比如维持下一个可用的新原子。线程状态(即看起来像s -> (a, s)
的函数,将初始状态作为参数并返回更新的状态和结果)表现出明显的一元结构,即给出一些第一步s -> (a, s)
,选择下一个步骤s -> (b, s)
可以依赖于查看中间结果a
。
对于读者宏,它是一个类似的故事,除了有问题的效果是输入的消耗。 monadic解析器是允许先前使用的输入影响后续输入解析方式的解析器。