首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Common Lisp中正确地将列表传递给宏

在Common Lisp中,可以使用backquotecomma来正确地将列表传递给宏。

宏是一种Lisp编程语言中的元编程工具,它允许程序员定义自己的语法扩展。当我们想要将一个列表作为参数传递给宏时,我们可以使用backquote来创建一个模板,并使用comma来插入列表的值。

下面是一个示例,展示了如何在Common Lisp中正确地将列表传递给宏:

代码语言:txt
复制
(defmacro my-macro (lst)
  `(print ,lst))

(let ((my-list '(1 2 3)))
  (my-macro my-list))

在上面的示例中,我们定义了一个名为my-macro的宏,它接受一个参数lst。在宏的定义中,我们使用backquote来创建一个模板,其中lst被插入到模板中的适当位置。通过使用comma,我们可以将lst的值插入到模板中。

let表达式中,我们创建了一个名为my-list的列表,并将其传递给my-macro宏。宏展开后,它将打印出my-list的值。

这是一个简单的示例,展示了如何在Common Lisp中正确地将列表传递给宏。在实际应用中,宏可以用于更复杂的语法扩展和代码生成。腾讯云提供了云计算服务,其中包括云服务器、云数据库、云存储等产品,您可以在腾讯云官网了解更多相关信息:腾讯云产品介绍

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Clojure与LispClojure与Lisp

1984年,改良自MacLisp、集各版本大成、跨平台、且被目为事实标准的Common Lisp诞生。至1994年,美国国家标准学会(ANSI)对Common Lisp语言进行了标准化。...在读取期运行代码,使得用户可以重新调整(reprogram)Lisp的语法; 在编译期运行代码,则是Lisp的工作基础; 在运行期编译代码,使得Lisp可以Emacs这样的程序,充当扩展语言(extension...在其他语言中,这种形式只是经过解析在后台产生,但是Lisp直接采用它作为表达形式。它由列表构成,而列表则是Lisp的基本数据结构。 用一门语言自己的数据结构来表达该语言,这被证明是非常强大的功能。...这可能听起来很怪异,但是对于Lisp语言却是再普通不过。最常用的做法就是使用。 术语""Lisp语言中,与其他语言中的意思不一样。...如果你创造了一种新语言,其中有car、cdr、cons、quote、cond、atom、eq这样的功能,还有一种把函数写成列表的表示方法,那么它们的基础上,你完全可以推导出Lisp语言的所有其他部分。

1.9K30
  • Lisp的本质(The Nature of Lisp)学习思考

    而且, Lisp没有语义约束, 你可以构造任何数据结构, 只要你原意。 Lisp通过(macro)来做元编程。我们写一组来把任务列表(to-do list)转换为专用领域语言。...如果我们用(+ 4 5)来代替arg1, 那么, 程序会先求出结果, 就是9, 然后把9传递给函数。的工作方式和函数类似。主要的差别是, 的参数代入时不求值。...(macro-name (+ 4 5)) 这里, (+ 4 5)作为一个表传递给, 然后就可以任意处理这个表, 当然也可以对它求值。的返回值是一个表, 然后有程序作为代码来执行。...例如, 上面曾经将过的C的求三次方的, 用Lisp来写是这样子: (defmacro triple (x) `(+ ~x ~x ~x)) (译注: Common Lisp, 此处的单引号应当是反单引号..., 意思是对表不求值, 但可以对表某元素求值, 记号~表示对元素x求值, 这个求值记号Common Lisp应当是逗号。

    1.7K60

    excel编程 c语言,(巨集)

    (Macro, 巨集),是一种批处理的称谓。 计算机科学里的是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式。解释器或编译器遇到时会自动进行这一模式替换。...对于编译语言,展开在编译时发生,进行展开的工具常被称为展开器。这一术语也常常被用于许多类似的环境,它们是源自展开的概念,这包括键盘语言。...Lisp类语言如Common Lisp和Scheme有更精巧的系统: 的行为如同是函数对自身程序文本的变形,并且可以应用全部语言来表达这种变形。...例如,可以对Microsoft Excel编程从扩展样式表或文本文件读取数据并创建 Great Plains .mac 文件,这一文件被用于特定的数据导入 Great Plains....其它的包括语言的项目,如OpenOffice.org,故意从其语言中排除了一些功能(如:自动执行)以避免破坏程序。然而,这一特性很多事务受到欢迎。

    1.6K20

    为什么Lisp语言如此先进?(译文)

    在读取期运行代码,使得用户可以重新调整(reprogram)Lisp的语法;在编译期运行代码,则是Lisp的工作基础;在运行期编译代码,使得Lisp可以Emacs这样的程序,充当扩展语言(extension...在其他语言中,这种形式只是经过解析在后台产生,但是Lisp直接采用它作为表达形式。它由列表构成,而列表则是Lisp的基本数据结构。 用一门语言自己的数据结构来表达该语言,这被证明是非常强大的功能。...这可能听起来很怪异,但是对于Lisp语言却是再普通不过。最常用的做法就是使用。 术语""Lisp语言中,与其他语言中的意思不一样。...如果你创造了一种新语言,其中有car、cdr、cons、quote、cond、atom、eq这样的功能,还有一种把函数写成列表的表示方法,那么它们的基础上,你完全可以推导出Lisp语言的所有其他部分。...你实际上就是在做同样的事,只不过划出了一个独立的区域,保存累加器函数,区别只是保存在对象的一个属性,而不是保存在列表(list)的头(head)

    1.2K60

    深入浅出 Babel 下篇:既生 Plugin 何生 Macros

    如上图,本质上不是C语言的一部分, 它由C预处理器提供,预处理器在编译之前对源代码进行文本替换,生成真正的 C 代码,再传递给编译器。...is good" 对于Lisp而言,有点像一个函数, 只不过这个函数必须返回一个quoted数据; 当调用这个时,Lisp会使用unquote函数返回的quoted数据转换为程序。...所以大部分实现会参考 Lisp 的S-表达式,取折中方案,传入的程序转换为Tokens,再组装成类似quoted的数据结构。...除了数据结构的设计,现代编程语言的机制还包含以下特性: 1️⃣ 卫生(Hygiene) 卫生指的是内生成的变量不会污染外部作用域,也就是说,展开时,Sweet.js 会避免内定义的变量和外部冲突...使用插件形式, 你首先要配置插件: { "plugins": ["preval"] } 代码: // 传递给preval的字符串会在编译阶段被执行 // preval插件会查找preval标识符,字符串提取出来执行

    1.5K31

    不管是嵌套 XML,还是 Lisp 嵌套括号,还是 XXX 的 Map 数据结构,一切都是树形结构——映射。Lisp的本质(The Natur

    Lisp, 我们给表加一个前缀'来表示数 据。...而且, Lisp没有语义约束, 你可以构造 任何数据结构, 只要你原意。 Lisp通过(macro)来做元编程。我们写一组来把任务列表(to-do list)转换为专用领 域语言。...如果我们用(+ 4 5)来代替arg1, 那么, 程序会先求出结果, 就是9, 然后把9传递给函数。的工作方式和函数类似。主要 的差别是, 的参数代入时不求值。...例如, 上面曾经将过的C的求三次方的, 用Lisp来写是这样子: (defmacro triple (x) `(+ ~x ~x ~x)) (译注: Common Lisp, 此处的单引号应当是反单引号..., 意思是对表不求值, 但可以对 表某元素求值, 记号~表示对元素x求值, 这个求值记号Common Lisp应当是逗号。

    1.4K20

    clojure基础入门(一)

    函数式编程以函数为第一类对象,其小括号后面第一个元素被Clojure解释器当成一个函数或,其后面的都会被当成参数,如上"hello world"是被当成参数传入str函数进行输出。...函数 clojure以函数为第一类对象,其小括号后面第一个元素被Clojure解释器当成一个函数或,其后面的都会被当成参数。...加参数后,再次调用需要传入值,如果不会报异常。 ? 下面函数内部使用a函数参数,如果想要拼接的话,可以在内部使用str函数,用它返回的值当成Get函数的参数:  ?...clojurelisp习惯)有个规定:对于判断功能的函数,函数名后面都有一个“?”号。所以只要看到后面带问号的函数名,就知道这一定是一个判断语句。 user=> (fn?...(macro)           Clojure几乎所有的函数和都是用Clojure代码实现的,关于后面再说。

    1.5K30

    clojure基础入门(一)

    函数式编程以函数为第一类对象,其小括号后面第一个元素被Clojure解释器当成一个函数或,其后面的都会被当成参数,如上"hello world"是被当成参数传入str函数进行输出。...函数 clojure以函数为第一类对象,其小括号后面第一个元素被Clojure解释器当成一个函数或,其后面的都会被当成参数。...加参数后,再次调用需要传入值,如果不会报异常。 ? 下面函数内部使用a函数参数,如果想要拼接的话,可以在内部使用str函数,用它返回的值当成Get函数的参数:  ?...clojurelisp习惯)有个规定:对于判断功能的函数,函数名后面都有一个“?”号。所以只要看到后面带问号的函数名,就知道这一定是一个判断语句。 user=> (fn?...(macro)           Clojure几乎所有的函数和都是用Clojure代码实现的,关于后面再说。

    1.3K40

    Emacs 折腾记

    我工作倒并没有用得到 Lisp 的地方,但是最近眼前晃过的一些书,比如《计算机程序的构造和解释》、《码农》杂志第 13 期,都对这门古老的语言推崇备至,还有垠神也撰文《Lisp 已死,Lisp 万岁!...Common Lisp 开发环境 学习 Common Lisp 是使用 Emacs 最主要的任务,配好了文本编辑,当然得先把 Common Lisp 开发环境配置好了。...本来什么也不用配置的情况下 M-x ielm 就能进入一个 Emacs Lisp 的 REPL,但是它与 Common Lisp 毕竟还是有区别,所以还是另配置一个。...然后如何运行当前 py 文件这件事上遇到些问题。 Vim 我一直是用 :!...如果没有 -a 参数,那么 Server 没有启动的情况下,右键打开文件弹框提示: emacsclientw.exe: No socket or alternate editor.

    1.9K10

    Emacs 折腾记

    我工作倒并没有用得到 Lisp 的地方,但是最近眼前晃过的一些书,比如《计算机程序的构造和解释》、《码农》杂志第 13 期,都对这门古老的语言推崇备至,历数现代 Lisp 方言的先进性,再者我也一直有学习一门函数式编程语言的想法...Common Lisp 开发环境 学习 Common Lisp 是使用 Emacs 最主要的任务,配好了文本编辑,当然得先把 Common Lisp 开发环境配置好了。...本来什么也不用配置的情况下 M-x ielm 就能进入一个 Emacs Lisp 的 REPL,但是它与 Common Lisp 毕竟还是有区别,所以还是另配置一个。... ~/.emacs 文件里加上: M-x slime 就可以进入到 REPL 进行 Common Lisp 的学习了。... ~/.emacs 文件里添加: 这样自动补全之类的就没有问题了。 然后如何运行当前 py 文件这件事上遇到些问题。 Vim 我一直是用 :!

    1.3K20

    各种编程语言对尾递归的支持

    Common Lisp   测完Scheme,再来测Scheme的本家兄弟,另外一种Lisp——Common Lisp   先用Common Lisp实现add,因为Common Lisp数据和过程用不同的命名空间...RESET   因为没有尾递归优化的规定,所以对于那种无限循环,Common Lisp只能选择迭代才能保证不崩栈,比如使用do。...但是似乎也改变了Lisp的味道,do显然此处只能在设计编译器、解释器的时候就得单独实现,虽然按理Lisp下这些都应该是,但是无论用如何函数式编程映射为显示的迭代,因为尾clisp递归优化不支持,则无法和系统提供的...sbcl是Common Lisp的另外一个实现,在这个实现,我们使用第一个add函数的版本,没有发生崩栈。...也终于给了我们一个更为靠谱的Common Lisp的实现。

    2.7K20

    几分钟内学习 Clojure

    Clojure 是JVM上的一个LISP语言变种,它比Common Lisp更强调纯函数式编程,但提供了一些STM工具以处理它所引入的状态问题。...Clojure源码托管:github 在线练习编译环境: himera learnclojure.clj 示例: ; 分号作为注释的开始 ; Clojure 用一种把元素用括号括起来的像列表一样的方式来书写...([name] (str "Hello " name))) (hello3 "Jake") ; => "Hello Jake" (hello3) ; => "Hello World" ; 函数允许参数打包成列表...1 2 3) ; => "You passed 3 args: (1 2 3)" ; 你可以普通参数和列表参数混合使用 (defn hello-count [name & args] (str...(#{1 2 3} 4) ; => nil (没有就返回nil) ; clojure.sets 命名空间包含更多的函数 ; 一些有用的形式 ;;;;;;;;;;;;;;;;; ; clojure的逻辑结构都是

    1.7K40

    Java计算机IT编程文档常见单词翻译

    服务器 tag 标签 template 模版 terminal 终端机 timestamp 时间戳章 保留不译的名词: … 基本上 Rails、Ruby 有的特有名词,除了计算机科学中常见的词儿以外,不造成读者困扰的情况下...Lisp Object System | Common Lisp 对象系统 | | | 英文 中文 英文 译法 1 译法 2 译法 3 dimensions 维度 duplicate 复本...form 过度形式 intersection 交集 ill type 类型不正确 indent 缩排 缩进 indention 缩排 缩进 indentation 缩排 缩进 infix 序...| | newline | 换行 | 新行 | | | number crunching | 数字密集运算 | | | 英文 中文 英文 译法 1 译法 2 译法 3 on the fly 运行...pass by reference 按引用传递 引用 pass by value 按值传递 值 pattern 模式 pattern match 模式匹配 perform 执行

    82440

    Java计算机IT编程文档常见单词翻译

    request 请求 routing 路由 server 服务器 tag 标签 template 模版 terminal 终端机 timestamp 时间戳章 保留不译的名词: 除了计算机科学中常见的词儿以外,不造成读者困扰的情况下...Lisp Object System Common Lisp 对象系统 英文 中文 英文 译法 1 译法 2 译法 3 dimensions 维度 duplicate 复本 delegation...form 过度形式 intersection 交集 ill type 类型不正确 indent 缩排 缩进 indention 缩排 缩进 indentation 缩排 缩进 infix 序...processing 自然语言处理 newline 换行 新行 number crunching 数字密集运算 英文 中文 英文 译法 1 译法 2 译法 3 on the fly 运行...pass by reference 按引用传递 引用 pass by value 按值传递 值 pattern 模式 pattern match 模式匹配 perform 执行

    97242

    因为对Perl和Python不满?圣诞节无聊?编程语言的出现都这么随意吗?

    1958 年秋,麦卡锡 MIT 成立了人工智能小组,开始着手设计这种新的列表处理语言。这最终导致 1960 年,Lisp 的诞生。...但是这种想法遭到了当时 Lisp 程序员的反对,最后麦卡锡开了 MIT,从此 Lisp 的语法凝固 S 表达式上。 Lisp 建立列表和 lambda 演算和基础上,是函数式编程的鼻祖。...COBOL 创造了一些新概念:(DEFINE)和数据结构(记录)。 COBOL 商务领域被广泛的使用。 COBOL 对后来的语言几乎没有影响,但 PL/I 除外。 A.5....命令式编程的数据和数据的有关函数集成在一起,就形成了面向对象编程的对象,而对象的类型就是类。命令式编程主程序调用子程序的从属关系,变为面向对象编程对象之间互相发送消息的平等关系。...所谓逻辑式编程,就是以形式逻辑的方式将计算过程传递给计算机。 A.12. 极简主义:Scheme Scheme 作为一种 Lisp 方言,同样诞生在 MIT,时间是 1975 年。

    1.6K60

    模板标签

    . %},并且有一个语句{% endxxx %}来进行结束 作用 输出创建文本 控制逻辑和循环 二、if 条件分支 概述 if语句和python的类似,可以使用>,=,...#} {{ test_arg() }} {# 实参 #} {{ test_arg('lucky',18) }} {{ test_arg('张三') }} 的导入 真实的开发,会将一些常用的单独放在一个文件...{{ public_macro.test_arg('lucky') }} 注意 的调用只能在的下方来调用 如果有形参 且没有默认值 则可以不实参 如果没有形参 则不可以实参 的形参默认值... {% endblock %} 注意 当重写了一个block,原来的显示内容就没了,八成的原因是没有调用super 模板不能有同名的block 不支持多继承 八、对比包含、、继承 相同点...均实现了代码的复用 不同点 包含是直接目标文件整个渲染出来 类似函数,并且可以参,需要定义和调用 继承的本质是代码的替换,一般用来实现页面重复不变的区域

    58510

    人工智能技术入门该读哪些书?StackOverflow上最推荐这些

    两位作者众所周知的算法编码成可调用的函数库,可以用来完成更复杂的任务。当然,这也作为一本用户手册,目录结构清晰,遇到问题时可进行查阅。...9.模式识别的神经网络 ?...实用Common Lisp编程 ? Practical Common Lisp的作者是Peter Seibel,加州大学伯克利分校教授。...本书是一本不同寻常的Common Lisp入门书,介绍了作者的学习经历,分别讲述了各种基础知识,主要包括:REPL及Common Lisp的各种实现、S-表达式、函数与变量、标准与自定义等,然后通过...本书适合Common Lisp初学者及对其感兴趣的相关人员。 中译本《实用Common Lisp编程》定价89元,各大电商平台都有,偶尔断货。

    1.3K51

    Java的值调用

    int变量num传递给change()方法,change()方法接收到后值改变为20。...值调用实际参数被求值,其值被绑定到函数对应的变量上(通常是把值复制到新内存区域)。...尽管很多使用值调用的编程语言(如Common Lisp、Eiffel、Java)从左至右的求值函数的实际参数,某些语言(比如OCaml)从右至左的求值函数和它们的实际参数,而另一些语言(比如Scheme...值调用:值调用,实际参数被求值后传递给被调函数。也就是说值调用是实参在被传给函数之前就被求值的一种求值策略。 Java的体现 那什么叫实参在被传给函数之前就被求值呢?求的是谁的值呢?...引用调用(Call by reference) 引用调用”求值,传递给函数的是它的实际参数的隐式引用而不是实参的拷贝。通常函数能够修改这些参数(比如赋值),而且改变对于调用者是可见的。

    3.5K20
    领券