当前位置: 首页 > 编程笔记 >

common-lisp 反引号-为宏编写代码模板

令狐新翰
2023-03-14
本文向大家介绍common-lisp 反引号-为宏编写代码模板,包括了common-lisp 反引号-为宏编写代码模板的使用技巧和注意事项,需要的朋友参考一下

示例

宏返回代码。由于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 上现为试验阶段。