X10*_*10D 2 macros scheme racket
AND 和 OR 是宏,并且由于宏不是方案/球拍中的第一类,因此它们不能作为参数传递给其他函数。部分解决方案是使用 and-map 或 or-map。是否可以编写一个接受任意宏并将其转换为函数的函数,以便它可以作为参数传递给另一个函数?是否有任何语言具有一流的宏?
一般来说,没有。考虑到let(或可能)作为宏实现lambda:
(let ((x 1))
  (foo x))
Run Code Online (Sandbox Code Playgroud)
可能是一个扩展为的宏
((lambda (x) (foo x)) 1)
Run Code Online (Sandbox Code Playgroud)
现在,转换let为函数会是什么样子?显然这是无稽之谈。它的输入是什么?它的返回值?
很多宏都会这样。事实上,任何可以在不失去任何功能的情况下常规转换为函数的宏都是一个坏宏!这样的宏应该是一个函数。