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

使用gensym的以下Common Lisp宏有什么问题?

这个问题是关于使用gensym的Common Lisp宏的问题。

gensym是一个Common Lisp函数,用于生成一个新的、唯一的符号名称。它通常用于生成临时变量名称,以避免命名冲突。在宏中使用gensym可以确保生成的临时变量名称不会与其他代码冲突。

然而,在某些情况下,使用gensym可能会导致问题。例如,如果宏中使用了gensym生成的临时变量名称,但是在宏的外部也使用了相同的名称,则可能会导致命名冲突。此外,使用gensym生成的临时变量名称可能会使得代码难以阅读和理解,因为这些名称是自动生成的,并且没有明确的语义。

为了避免这些问题,建议在宏中尽可能使用明确的变量名称,并且避免使用gensym生成的临时变量名称。如果必须使用gensym,则应该确保在宏中使用的所有名称都是唯一的,并且在宏的文档中清晰地说明这些名称的用途和生命周期。

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

相关·内容

Clojure与LispClojure与Lisp

1984年,改良自MacLisp、集各版本大成、跨平台、且被目为事实标准Common Lisp诞生。至1994年,美国国家标准学会(ANSI)对Common Lisp语言进行了标准化。...3 递归 Lisp是第一种支持递归函数高级语言。 4 变量动态类型 在Lisp语言中,所有变量实际上都是指针,所指向类型之分,而变量本身没有。...8 代码使用符号和常量组成树形表示法(notation) 9 无论什么时候,整个语言都是可用 Lisp并不真正区分读取期、编译期和运行期。...思想8和思想9,意味着你可以写出一种能够自己编程程序。这可能听起来很怪异,但是对于Lisp语言却是再普通不过。最常用做法就是使用。 术语""在Lisp语言中,与其他语言中意思不一样。...Lisp无所不包,它既可能是某样表达式缩略形式,也可能是一种新语言编译器。如果你想真正地理解Lisp语言,或者想拓宽你编程视野,那么你必须学习

1.9K30

Clojure 运行原理之编译器剖析

本文为第一篇,涉及到主要内容:编译器工作流程、Lisp 机制。...一般来说,编译器包括两个部分: 前端:词法分析 → 语法分析 → 语义分析 后端:分析、优化 → 目标代码生成 Clojure 编译器也遵循这个模式,大致可以分为以下两个模块: 读取 Clojure...与 Common Lisp 不同,普通用户无法扩展 Clojure 里面的read table。...关于扩展read table好处,可以参考 StackOverflow 上 What advantage does common lisp reader macros have that Clojure...,加深了对 eval-apply 循环理解,还有一点就是揭开了真实面貌,之前一直认为是个很神奇东西,其实它只不过是编译时运行函数而已,输入与输出内容既是构成程序数据结构,同时也是程序内在

96430

excel编程 c语言,(巨集)

用途在于自动化频繁使用序列或者是获得一种更强大抽象能力——但这常常是一回事。 计算机语言如C语言或汇编语言简单系统,由编译器或汇编器预处理器实现。...Lisp类语言如Common Lisp和Scheme更精巧系统: 行为如同是函数对自身程序文本变形,并且可以应用全部语言来表达这种变形。...例如,一种 Lisp 方言 cond 而没有 if ,就可以使用由前者定义后者。Lisp 语法去部主要扩展,比如面向对象 CLOS 系统,可以由来定义。...MacroML型别语法,一种有效理解方式是把这种语法看作是多阶段计算。...Emacs 最初被设计为编辑语言 TECO 集,后被移植为 Lisp 一种方言 Emacs Lisp。Vim也允许用户录制和播放简单键盘

1.6K20

Emacs 折腾记

我工作中倒并没有用得到 Lisp 地方,但是最近眼前晃过一些书,比如《计算机程序构造和解释》、《码农》杂志第 13 期,都对这门古老语言推崇备至,历数现代 Lisp 方言先进性,再者我也一直学习一门函数式编程语言想法...,以前就听说过 Evil 这么个东西,试了一下发现这货还真是强大,常用编辑模式、快捷键、命令,甚至和正则表达式等等操作都模拟得很好,跟在 gVim 里感觉一模一样,平移编辑习惯坡度一下没了。...Common Lisp 开发环境 学习 Common Lisp使用 Emacs 最主要任务,配好了文本编辑,当然得先把 Common Lisp 开发环境配置好了。...本来什么也不用配置情况下 M-x ielm 就能进入一个 Emacs Lisp REPL,但是它与 Common Lisp 毕竟还是区别,所以还是另配置一个。...在 ~/.emacs 文件里加上: M-x slime 就可以进入到 REPL 进行 Common Lisp 学习了。

1.3K20

Lisp本质(The Nature of Lisp)学习思考

一定有人问了, 我们的话题和C什么关系? 我们已经知道了很多关于元编程事情, 也探讨过专门写代码代码。理解这问题一定难度, 因为相关讨论文章所使用编程语言, 都是你们不熟悉。...所占位置, 就被替换为这个结果代码。我们可以定义一个把数据替换为任意代码, 比方说, 替换为显示数据给用户代码。这和元编程, 以及我们要做任务表程序什么关系呢?...例如, 上面曾经将过C求三次方, 用Lisp来写是这样子: (defmacro triple (x) `(+ ~x ~x ~x)) (译注: 在Common Lisp中, 此处单引号应当是反单引号...这里作者所用记号是自己发明一种Lisp方言Blaise, 和common lisp略有不同, 事实上, 发明方言是lisp高手独有的乐趣, 很多狂热分子都热衷这样做。...如果你觉得有趣, 或者什么问题, 意见或建议, 请给我发邮件coffeemug@gmail.com, 我会很高兴收到你反馈

1.7K60

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

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.6K20

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

思想8和思想9,意味着你可以写出一种能够自己编程程序。这可能听起来很怪异,但是对于Lisp语言却是再普通不过。最常用做法就是使用。 术语""在Lisp语言中,与其他语言中意思不一样。...Lisp无所不包,它既可能是某样表达式缩略形式,也可能是一种新语言编译器。如果你想真正地理解Lisp语言,或者想拓宽你编程视野,那么你必须学习。...就我所知,(采用Lisp语言定义)目前仍然是Lisp独有的。一个原因是为了使用,你大概不得不让你语言看上去像Lisp一样古怪。...这比Lisp和Ruby版本,更多语法元素,因为在Perl语言中,你不得不手工提取参数。...、到处都是bug、运行速度很慢Common Lisp实现。"

1.2K60

写本Racket入门书

但Paul Graham在「黑客与画家」中对lisp无比推崇又让我一直如鲠在喉,不征服lisp仿佛自己始终没能窥探编程奥义,那种感觉,估计和搞到了法国却搞不定约瑟芬拿破仑一样一样。...能写点简单程序,做个动画,画个图,用regex处理下文本,定义一些简单语法聊以自慰(你可以打开github repo下util/common.rkt自行观看,不要鄙视我)。...(转格式估计都要累死我),就像我在书中「前言」里写到那样,写这本书是出于私利 —— 以教代学,它并不代表我对Racket任何程度深入掌握。...:介绍raco及主要Racket packages 8) 可爱:这是肉戏,也是lisp精髓 9) 用来设计你语言:假象一门语言,用Racket实现 10) 延迟计算:讲讲continuation...使用Racket撰写复杂系统:这个没想好,看我学到什么程度 14) Racket其它特性:前面章节没有提到,但也比较重要概念和库,算是拾遗 15) 下一站:Typed Racket:Racket

2.3K80

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

一定有人问了, 我们的话题和C什么 关系? 我们已经知道了很多关于元编程事情, 也探讨过专门写代码代码。理解这问题 一定难度, 因为相关讨论文章所使用编程语言, 都是你们不熟悉。...它们实际上就是制造程序程序。它们一 个神秘名字, 叫做元编程。所谓元编程本义, 就是如此。 元编程本来可以用到无数多地方, 但实际上使用次数却没有那么多。...所占位置, 就被替换为这个 结果代码。我们可以定义一个把数据替换为任意代码, 比方说, 替换为显示数据给用户 代码。 这和元编程, 以及我们要做任务表程序什么关系呢?...例如, 上面曾经将过C求三次方, 用Lisp来写是这样子: (defmacro triple (x) `(+ ~x ~x ~x)) (译注: 在Common Lisp中, 此处单引号应当是反单引号...如果你觉得有趣, 或者什么问题, 意见或 建议, 请给我发邮件coffeemug@gmail.com, 我会很高兴收到你反馈。

1.4K20

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

这种数据即程序、程序即数据概念,使得Lisp可以轻松地自定义. 不妨来看一下Lisp定义示例: ; 使用defmacro定义一个nonsense, 接收一个function-name参数....,这里一个Javascript实现 注意:一般在编译阶段被展开, 下面代码只是为了协作你理解上述Lisp代码 function nonsense(name) { let rtn eval...Lisp灵活性得益于简单语法(S-表达式可以等价于它AST),对于复杂语法语言(例如Javascript),要实现类似Lisp就难得多....Lisp 一个关键技术点。...除了数据结构设计,现代编程语言机制还包含以下特性: 1️⃣ 卫生(Hygiene) 卫生指的是在内生成变量不会污染外部作用域,也就是说,在展开时,Sweet.js 会避免内定义变量和外部冲突

1.5K31

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

读者可以把这本书当成路线图,了解在智能游戏方面已经被成功使用技术和在将来具有很大潜力新技术。 无论是经验丰富智能游戏专家,还是准备进入游戏业界的人士,本书都是必备资源。 ?...内容按照难易程度顺序编排,先介绍了语言处理基础,讲述如何使用Python程序分析感兴趣文本信息;接着讨论了结构化程序设计,以巩固前面几章中介绍编程要点;然后介绍了语言处理基本原理,包括标注、...实用Common Lisp编程 ? Practical Common Lisp作者是Peter Seibel,加州大学伯克利分校教授。...本书是一本不同寻常Common Lisp入门书,介绍了作者学习经历,分别讲述了各种基础知识,主要包括:REPL及Common Lisp各种实现、S-表达式、函数与变量、标准与自定义等,然后通过...本书适合Common Lisp初学者及对其感兴趣相关人员。 中译本《实用Common Lisp编程》定价89元,各大电商平台都有,偶尔断货。

1.3K51

Clojure 学习入门(1)—— 学习资料

Clojure(发音类似"closure",['kləʊʒə(r)])是一套现代Lisp语言动态语言版,它是一个函数式多用途语言,其语法和其他Lisp一样,都是建立在 S-expression...与其他Lisp一样,Clojure认为代码即数据,同时有复杂系统。 Clojure 理念和特性 Clojure是什么,为什么有人要学这门语言?...Clojure虽然很强学术背景支持,但是绝不是一门只在象牙塔中语言,每天都有众多开发者在各自开发领域内使用它。 动态而强有力 (没错,它是lisp!)...年7月) 1983 – Ada 1984 – Common Lisp 1984 – MATLAB 1985 – Eiffel 1986 – Objective-C 1986 – Erlang 1987...1989 – FL 1990 – Haskell 1991 – Python 1991 – Visual Basic 1993 – Ruby 1993 – Lua 1994 – CLOS (ANSI Common

1.3K10

Lisp学习--Windows下面的开发环境搭建

很久以前,就准备学习Lisp,但是遇到不少困难,社区太凌乱,也一直很犹豫,直到看了《Common Lisp - 想说爱你不容易》,想看看Common Lisp怎么样,之前都是拿Lisp方言Schemel...正好有一篇Windows下如何安装使用CLISP文章《Lisp语言: 在Windows下搭建CLisp环境》,于是在官网下载了一个安装程序 http/SF     (sources and win32...现在,可以开始Common Lisp学习之旅了,比如写第一个函数: ? 全选文字,右键菜单,发送到Lisp执行,就得到了结果4,很方便。 了这个,大家还觉得学习Lisp很复杂么?...参考: 推荐另外一种Lisp环境 AllegroCL ,它有图形化编程环境,可以开发窗体应用程序,请参考文章 Windows环境下学习Lisp和Scheme两大利器 (http://seagate.iteye.com...什么生产环境使用例子吗?

2.9K60

Emacs Lisp

前言Lisp 是一门很古老语言LISP 是具有悠久历史计算机编程语言家族,独特和完全括号前缀符号表示法,起源于1958年,是现今第二悠久而仍广泛使用高级编程语言,只有 FORTRAN 编程语言比它更早一年...,LISP 编程语族已经演变出许多种方言,现代最著名通用编程语种是 Common Lisp 和 Scheme , 以上解释来自 WIKIEmacs LispLisp 一个分支Emacs Lisp...,一种直译式脚本语言,为LISP方言之一,GNU Emacs与XEmacs文字编辑器都使用这个编程语言来扩展它们功能,它直译器是以C语言来实作,它受到Maclisp影响很大,但是跟Common...Lisp与Scheme有所不同最近我迷上了 Emacs所以顺藤摸瓜,竟然搭进去了一门语言万万没想到,为了了解一个编辑器,竟然搭进去了一门语言好在这门语言结构比较简单清晰以致于可以用 15 分钟入个门Tip...: 这一篇纯属于摘抄,不是原创,只是好东西忍不住拿出来分享,如果原作者有意见,可以随时联系我,下线此文章,我完全尊重原作者意见原文,请参考 Emacs Lisp 15 分钟入门

59840

Clojure 开发那些事

我这里放一些相关资料,兴趣读者可以自取: Understanding Clojure’s Persistent Vectors What Lies Beneath - A Deep Dive Into...使用比较简单,通过 Intellj 插件管理器安装后即可使用,第一次使用时需要设置下快捷键类型 Emacs + Cider 作为一门 Lisp 方言,怎么能没有一个好 Emacs mode 呢?...“操作系统”,对以括号著称 Lisp 语言天然支持,括号匹配主要是 Paredit mode,可以方便把括号作为一个整体操作,不过像 Cursive 这种插件也集成了 Paredit 主要功能...Emacs + Cider 组合相比 Intellj + Cursive 最大优势就是对支持,Cider 提供了对展开快捷键,但在 Cursive 中我没找到,不过也是比较高级功能,初学者应用用不到...Intellj Debug Mode 借助于 IDE 优势,我们可以打断点,一步一步调试,但是 Cursive 对支持比较有限,目前出来把展开外,没找到好调试好方法。

1.5K20
领券