宏返回代码。由于Lisp中的代码由列表组成,因此可以使用常规列表操作功能来生成它。
;; A pointless macro (defmacro echo (form) (list 'progn (list 'format t "Form: ~a~%" (list 'quote form)) form))
这通常很难阅读,尤其是在较长的宏中。Backquote阅读器宏允许编写通过选择性评估元素填充的引用模板。
(defmacro echo (form) `(progn (format t "Form: ~a~%" ',form) ,form)) (macroexpand '(echo (+ 3 4))) ;=> (PROGN (FORMAT T "Form: ~a~%" '(+ 3 4)) (+ 3 4))
这个版本看起来几乎像常规代码。逗号用于评估FORM; 其他所有内容均按原样返回。请注意,',form单引号位于逗号之外,因此它将返回。
人们还可以,@在位置上拼接列表。
(defmacro echo (&rest forms) `(progn ,@(loop for form in forms collect `(format t "Form: ~a~%" ,form)) ,@forms)) (macroexpand '(echo (+ 3 4) (print "foo") (random 10))) ;=> (PROGN ; (FORMAT T "Form: ~a~%" (+ 3 4)) ; (FORMAT T "Form: ~a~%" (PRINT "foo")) ; (FORMAT T "Form: ~a~%" (RANDOM 10)) ; (+ 3 4) ; (PRINT "foo") ; (RANDOM 10))
反引号也可以在宏外部使用。
本文向大家介绍common-lisp 照应宏,包括了common-lisp 照应宏的使用技巧和注意事项,需要的朋友参考一下 示例 照应宏是一种引入变量(通常为IT)的宏,该变量捕获用户提供的表单的结果。一个常见的示例是Anaphoric If,它与regular一样IF,但也定义了变量IT以引用测试表单的结果。
本文向大家介绍common-lisp 常见的宏模式,包括了common-lisp 常见的宏模式的使用技巧和注意事项,需要的朋友参考一下 示例 待办事项:也许将说明移到备注处并分别添加示例 FOOF 在Common Lisp中,有一个通用引用的概念。它们允许程序员将值设置为各种“位置”,就好像它们是变量一样。利用此功能的宏通常F在名称中带有-postfix。该位置通常是宏的第一个参数。 从标准的例子
Common Lisp Koans(lisp-koans)是一个语言学习练习程序,类似 ruby koans,python koans 等等。Common Lisp Koans 主要是帮助学习一些 lisp 规范特性和改进,可以学习到大量的 Common Lisp 语言特性。 终端,在文件 'contemplate.lsp' 执行 lisp 解析器: sbcl --script contempla
本文向大家介绍common-lisp简单引用示例,包括了common-lisp简单引用示例的使用技巧和注意事项,需要的朋友参考一下 示例 Quote是一种特殊的运算符,可防止评估其参数。它返回其参数,未被评估。
我有一些我需要的特定代码,为了能够有某些我不想每次都写的I/O东西,我只想能够添加一个Java类,这样它就已经有了那些代码,我试着做了: 基本上这个东西需要在xml中,但我不知道如何正确地编写它,我以为到处都写${filename}就可以了,但它不起作用。总而言之,我希望文件的名称写在我写“${filename}”的地方,我该怎么做呢?
Steel Bank Common Lisp (SBCL) 源自于 CMUCL, 是一种高性能的Common Lisp编译器。它是开源/免费软件,采用自由许可。除了ANSI Common Lisp的编译器和运行系统,它提供了一个交互的运行环境,包括一个调试器,统计分析器,一个代码覆盖工具,以及许多其他的扩展。 SBCL 可运行于许多 POSIX 平台上,Windows 上现为试验阶段。