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

什么时候更喜欢gensym而不是Lisp中的make-symbol

在Lisp中,make-symbol用于创建一个新的符号。而gensym则用于创建一个唯一的符号,其名称由gensym函数自动生成。gensym在以下情况下可能比make-symbol更受欢迎:

  1. 当需要在符号名称中包含参数时,gensym可以方便地实现这一点。例如,在以下代码中,gensym用于创建一个唯一的符号名称:
代码语言:txt
复制

(let ((sym (gensym)))

代码语言:txt
复制
 (print sym)  ; 输出 (gensym)
代码语言:txt
复制
 (setf (symbol-value sym) 1)
代码语言:txt
复制
 (print (symbol-value sym))  ; 输出 1

)

代码语言:txt
复制
  1. 当需要在符号名称中包含特殊字符时,gensym可以方便地实现这一点。例如,在以下代码中,gensym用于创建一个包含下划线的符号名称:
代码语言:txt
复制

(let ((sym (gensym)))

代码语言:txt
复制
 (print sym)  ; 输出 (gensym)
代码语言:txt
复制
 (setf (symbol-value sym) 1)
代码语言:txt
复制
 (print (symbol-value sym))  ; 输出 1

)

代码语言:txt
复制
  1. 当需要确保符号名称唯一时,gensym可以方便地实现这一点。例如,在以下代码中,gensym用于创建一个唯一的符号名称,并将其用作变量:
代码语言:txt
复制

(let ((sym (gensym)))

代码语言:txt
复制
 (print sym)  ; 输出 (gensym)
代码语言:txt
复制
 (setf (symbol-value sym) 1)
代码语言:txt
复制
 (print (symbol-value sym))  ; 输出 1

)

代码语言:txt
复制

总之,在需要确保符号名称唯一或在符号名称中包含参数或特殊字符时,gensym可能比make-symbol更受欢迎。此外,gensym还可以在需要动态生成符号名称的情况下方便地实现。

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

相关·内容

Clojure与LispClojure与Lisp

Clojure与Lisp "Lisp 不是一门语言,它是一种构建素材。"...域指定语言(Domain Specific Languages ) 不仅 简单,而且一般化--lisp程序往往是按照 "自下而上" 开发方式写成....他原意只是想做一种理论演算,用简洁方式定义图灵机。 所以,为什么上个世纪50年代编程语言,到现在还没有过时?简单说,因为这种语言本质上不是一种技术,而是数学。数学是不会过时。...复制变量就相当于复制指针,不是复制它们指向数据。 5 垃圾回收机制 6 程序由表达式(expression)组成 Lisp程序是一些表达式区块集合,每个表达式都返回一个值。...8 代码使用符号和常量组成树形表示法(notation) 9 无论什么时候,整个语言都是可用 Lisp并不真正区分读取期、编译期和运行期。

1.9K30

几种编程语言优缺点

旋风式简介会讲C、C++、Lisp、Java、Perl (我们在亚马逊用到所有语言)、Ruby (我就是喜欢) 和 Python,把 Python 加进来是因为 —— 好吧,你看了就知道了,现在我可不说...但是这二者是同等能力。它们同样精确表示了计算机能干什么。 Lisp 机现在不是很流行了,除了在跳蚤市场里。从谁受欢迎来说,冯·诺曼机器赢了。...所以如果你不喜欢我针对 C++ 大放厥词,请你去学另一门语言并成为一个专家(我推荐 Lisp),只有那时你才有足够武器与我争论。然而,那时你将不会跟我争了。你上了我的当了。...我们前辈们已经到环保牧场上去了 (指没有大便牧场,译者注)。 Shel 用 C 写了 Mailman,客服部的人把它用 Lisp 封装了一下。Emacs-Lisp。...不是说你会想让它这样工作,而是 Larry 刚好那天在搞一个这样会方便问题。于是 Perl 数据结构从此就变得爆炸了鲸鱼了。

3.4K110
  • 有比JSON更好东西吗?

    基本上,是回答以下问题:“能找到比JSON更好东西吗?”。 这里找是用于数据序列化语言,不是配置文件。...toml https://github.com/toml-lang/toml 它被设计为配置语言,不是序列化格式。...从根本上讲,这是一种使像Windows .INI文件那样简单和普遍存在尝试,而这实际上是一种规范,不是一种流行语言。...它不是在不能保证稳定性单个特定实现之外进行标准化,因此不适用于通用用途。它旨在用作Servo快速简便RPC / IPC格式,实际格式基本上是该目标的实现细节。...优点: 轻快的人会喜欢它,非轻快的人会讨厌它。 合理简单好看 缺点: 轻快的人会喜欢它,非轻快的人会讨厌它。 对于列表以外复合数据类型,实际上没有公认语法。

    4.7K30

    用JavaScript实现一个编译器

    现在前端开发,我们常常会用到babel来编译例如react、vue框架代码,以支持更多古老)浏览器,babel编译代码过程就是编译原理应用之一。...分词原理:逐个读取源代码字符,与预设关键词、字符串、数字、操作符等LISP语言定义语法相关规则,转换成 {type: 'xx', value: 'xx'} 具有描述意义形式 例如LISP:...操作LISP得到AST能更好转换到C语言AST,因为他们AST结构都是类似的,操作AST比tokens容易。...此时自然会思考下,VScode编辑器Prettier代码格式化插件是不是也是这么做?...编译(转译)过程原理基本类似,还有很多优秀项目,比如codeMirror、babel、esprima、acorn、recast都是值得阅读源码,喜欢小伙伴一定要去瞅瞅。

    94240

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

    原意只是想做一种理论演算,用简洁方式定义图灵机。 所以,为什么上个世纪50年代编程语言,到现在还没有过时?简单说,因为这种语言本质上不是一种技术,而是数学。数学是不会过时。...复制变量就相当于复制指针,不是复制它们指向数据。   5. 垃圾回收机制。   6. 程序由表达式(expression)组成。Lisp程序是一些表达式区块集合,每个表达式都返回一个值。...代码使用符号和常量组成树形表示法(notation)。   9. 无论什么时候,整个语言都是可用Lisp并不真正区分读取期、编译期和运行期。...事实上,按照大多数公司实际情况,计划五年完成项目,很可能永远都不会完成。 我承认,上面的例子太极端。ITA似乎有一批非常聪明黑客,C语言又是一种很低层次语言。...你实际上就是在做同样事,只不过划出了一个独立区域,保存累加器函数,区别只是保存在对象一个属性不是保存在列表(list)头(head)

    1.2K60

    各种编程语言优缺点

    但是这二者是同等能力。它们同样精确表示了计算机能干什么。 Lisp 机现在不是很流行了,除了在跳蚤市场里。从谁受欢迎来说,冯·诺曼机器赢了。...所以如果你不喜欢我针对 C++ 大放厥词,请你去学另一门语言并成为一个专家(我推荐 Lisp),只有那时你才有足够武器与我争论。然而,那时你将不会跟我争了。你上了我的当了。...我们前辈们已经到环保牧场上去了 (指没有大便牧场,译者注)。 Shel 用 C 写了 Mailman,客服部的人把它用 Lisp 封装了一下。Emacs-Lisp。...不是说你会想让它这样工作,而是 Larry 刚好那天在搞一个这样会方便问题。于是 Perl 数据结构从此就变得爆炸了鲸鱼了。...我认为因为这个喜欢 Python 是很傻。我只是说有一堆比例让人惊奇其他工程师讨厌空格问题。 免责声明:本文系网络转载,版权归原作者所有。如涉及版权,请联系删除!

    4.4K60

    亚马逊工程师论各种编程语言优缺点

    这是我写旋风式编程语言简介 ,我会讲C、C++、Lisp、Java、Perl (我们在亚马逊用到所有语言)、Ruby (我就是喜欢) 和 Python,把 Python 加进来是因为 —— 好吧,...但是这二者是同等能力。它们同样精确表示了计算机能干什么。   Lisp 机现在不是很流行了,除了在跳蚤市场里。从谁受欢迎来说,冯·诺曼机器赢了。...所以如果你不喜欢我针对 C++ 大放厥词,请你去学另一门语言并成为一个专家(我推荐 Lisp),只有那时你才有足够武器与我争论。然而,那时你将不会跟我争了。你上了我的当了。...我们前辈们已经到环保牧场上去了 (指没有大便牧场,译者注)。   Shel 用 C 写了 Mailman,客服部的人把它用 Lisp 封装了一下。Emacs-Lisp。...不是说你会想让它这样工作,而是 Larry 刚好那天在搞一个这样会方便问题。于是 Perl 数据结构从此就变得爆炸了鲸鱼了。

    2.2K80

    畅谈百年编程语言

    作者 | 诺亚·吉布斯 译者 | Sambodhi 策划 | Tina 某些软件开发者,或普遍是生意人,喜欢谈论百年编程语言,甚至是百年框架。 这个话题非常大胆。...Fortran 是最古老、最繁荣语言之一,它生死取决于性能。所以这是“是”栏复选标记。 LISP 是另外一种最古老语言,它并不注重性能,但是由于其灵活性和易于实现繁荣。...性能并不是一件坏事。但如果你向 Fortran 社区询问,“你需要编译器实现简单吗?”他们会说“不关心”。LISP 社区可能不会说他们不关心性能,但他们也不会回避低性能有趣解释器。...最终,处理器变得更快,这一点被放弃了——在现代 LISP 实现,car 和 cdr 绝对不是简单寄存器访问,而且没有人在乎。只要性能可以接受,这对他们社区来说并不是一个重要承诺。...老实说,在其最鼎盛时候,没有多少竞争者,因此,它无需为自己承诺和小众担忧。现代 C 语言在其现代小众领域(操作系统、设备驱动、低级系统编程)更多是关于控制不是性能。

    26630

    求求你别学了:从 Prompt 到 RAG,从 RAG 到 DSPy

    因为 LLMs 对 prompts 方式很敏感,它不喜欢提示词,它就喜欢编程,或者说是它擅长编程! DSPy,就是让提示词 Prompt 变成编程语言一个框架。...一句话定性:它是一个旨在通过优先编程不是 prompt 来解决基于语言模型(LM)应用程序脆弱性问题框架。...管道远离操作提示接近编程。...说白了 LangChain RAG 技术是让提示词详细、丰富,形成一个标准提问模板, DSPy 则是原理提示模板,从编程角度去跟大模型交流。...具体它是怎么做呢? 签名 在 DSPy 程序,每次调用语言模型时,都必须采用自然语言签名(signature),不是传统手写提示。

    1K10

    影响Scala语言设计因素列表

    Scala语言设计“蓝本”语言 在最表层,Scala采用了Java和C#语法大部,它们大部分借自于C和C++句法改变。表达式,句子和代码块多数和Java一样,同样还有类,包和引用语法。...Scala语言设计:特点继承 Scala不是第一种强调伸展性和扩展性语言。...Smalltalk和Lisp两者都具有灵活语法,广泛应用在建造内嵌领域特化语言。...举例来说,它抽象类型提供了对泛型类型来说面向对象替代,它特质允许灵活控件组合,还有他拆分器提供了独立于表达方式去做模式匹配。这些革新已在近年编程语言会议阐述在论文里了。...【相关阅读】 喜欢Scala编程四个理由 Scala融合面向对象和函数概念方法 [Scala语言特性——可伸展语言 ](http://developer.51cto.com/art/200907

    1.2K70

    ​50年来最具影响力十大编程语言!

    正如大家都知道James Gosling是Java之父,但是谁创建了Perl、Pascal、Lisp、Erlang,并不是每个开发人员都能回答上来。...因此,我特意收集并分享以下10种最流行和最成功编程语言以及它们创造者。 由于我是一名Java开发人员,从Java获益良多,所以我索性将其放在列表首位。...至今C语言仍然非常流行,在系统编程得到了广泛应用。它比Java古老,但仍然保持着它优势。...据说它语法清晰富有表现力。 在美国Python已经在学术层面上取代了Java。与上个时代不同,学校学生们已经开始用Python不是C或Java编写程序。...六、PHP — Rasmus Lerdorf 不管你多么不喜欢PHP(Personal Home Page),你都不能忽视这样一个事实: 一半互联网都运行在这种美妙互联网语言上。

    60540

    Paul Graham:梦寐以求编程语言

    编程语言本来就是为了满足黑客需要产生,当且仅当黑客喜欢一种语言时,这种语言才能成为合格编程语言,不是被当做“指称语义”(denotational semantics)或者编译器设计。...流行秘诀 没错,大多数人选择某一种编程语言,不是因为这种语言有什么独特特点,而是因为听说其他人使用这种语言。但是我认为,外界因素对于编程语言流行其实并没有想象那么大影响力。...编程语言不是存在于真空之中。“编程”其实是及物动词,黑客一般都是为某个系统编程,在现实,编程语言总是与它们依附系统联系在一起。...我认为,语言设计者应该假定他们目标用户是一个天才,会做出各种他们无法预知举动,不是假定目标用户是一个笨手笨脚傻瓜,需要别人保护才不会伤到自己。...比如,黑客喜欢破解,破解就意味着深入内部,揣测原始设计者意图。 你应该敞开胸怀,欢迎这种揣测。对于制造工具的人来说,总是会有用户以违背你本意方式使用你工具。

    92620

    《代码英雄》第三季(7):与机器对话

    它不仅能帮助机器理解命令,还能帮助机器理解一些常识性逻辑。麦卡锡发现,他可以编写条件表达式,即体现规则代码,不是仅仅是直白命令。...人们是如何定义它?因为 LISP 最初为 IBM 704 开发,它每次做其实只是一件事。看起来并不是很“智能”。当时的人们是如何看待“智能”呢?...这一代早期 AI 人喜欢回避这个问题,并说,“嗯,哲学家们还没有就什么是‘智力’达成一致,但如果我们制造出一台能下棋电脑,我想我们都同意这是‘智能’。...麦卡锡打赌,10 年后,电脑将能够在国际象棋比赛赢过利维。但是,如果事情进展得那么顺利,那就不是《代码英雄》故事了。那时候麦卡锡还不知道,人工智能冬天就要来了。...我们在这里描述是一个计算机编程世界,它被一分为二:一方面是约翰·麦卡锡这样的人,他们试图使用 LISP 等新型语言来探究智能本质;另一方面,也不可避免地存在着另一群人,他们专注于解决实际问题,

    27330

    NUS CS1101S:SICP JavaScript 描述:前言、序言和致谢

    因此,虽然原则上我们可以只使用一个通用函数,但我们喜欢将代码模块化,给各个部分命名,并提到函数描述名称,不是不断地将描述本身提供给通用函数。...在这本书中,“程序”使用集中在使用 Lisp 方言编写、在数字计算机上执行程序创建、执行和研究上。使用 Lisp,我们限制或限定不是我们可以编程内容,只是我们程序描述符号。...在 Pascal ,可声明数据结构丰富多样导致函数内专业化,抑制和惩罚了随意合作。最好是有 100 个函数操作一个数据结构,不是有 10 个函数操作 10 个数据结构。...SICP 最初两版使用 Scheme 编程语言作为其程序示例,其极简表达式导向语法使得该书能够专注于基本思想不是所选择语言设计。...这种变化本质是最好称为“程序式认识论”出现——从命令角度研究知识结构,不是古典数学学科所采用更为陈述性观点。数学提供了处理“是什么”概念精确框架。

    18010

    惊呆了,老外竟然用50编程语言写“Hello,Word!”,我服了...

    6.Logo - 1968 年 Logo 语言很像 Lisp 语言,但比 Lisp 容易使用,这正是 Logo 被发明出来原因,正如人们通常所认为那样,Logo 是“没有圆括号 Lisp 语言”...尽管它不是用来创建简单“Hello, World!”程序,但是,照下面这样创建一个 SQL 程序却是非常有趣。...Perl - 1987 年 Perl 编程语言由 Larry Wall 创建于 1987 年,是为容易地处理基于文本信息创建。...目前,Dart 还没有达到它目标,开发人员喜欢将 Dart 转换成与现代所有浏览器兼容 JavaScript 代码,Dart 还可以用于服务端编程。...以上编程语言清单只占到人们发明所有编程语言一小部分,我邀请你在评论区分享你最喜欢语言所编写“Hello, World!”程序,但请不要和上面清单上语言重复哦。

    79220

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

    旧版本使用了模式匹配,和Rust语法类似,我个人喜欢这个,不知为何废弃了 macro define { rule { $x } => { var $x } rule...模块化宏是源代码一部分,不是构建脚本一部分,这使得它们可以被灵活地使用、重构以及废弃。...下文介绍 babel-plugin-macros 最大优势就在这里, 通常我们希望构建环境是统一、稳定、开发人员应该专注于代码开发,不是如何去构建程序,正是因为代码多变性,才催生出了这些方案...上面列举插件场景,并不是所有插件都是通用,它们要么是跟某一特定框架绑定、要么用于处理特定文件类型或数据。这些非通用插件是最适合使用macro取代。 用 preval 举个例子....你必须在源代码通过导入语句声明你使用了 Macro;基于插件方式,你可能不知道preval这个标识符哪里来? 如何被应用?何时被应用?

    1.5K31

    使用 Python 创建 AI 比你想象轻松

    LISP是创造AI最流行语言之一。其最佳功能包括垃圾回收,统一语法,动态类型和交互式环境。LISP代码是s表达式并由列表组成。 另一种广泛流行AI编程语言是Prolog。...Python是在20世纪80年代末创建。它实现始于1989年。Python哲学是非常有趣,因为它包括几个格言。显式不是隐式,简单不是复杂。Python创作者珍视美丽设计和外观。...他们喜欢复杂。更重要是,他们声称可读性是计数。Python有一个干净语法和语法。它是自然和流利。正如Python开发人员所说,语言目标是使用酷。...以英国喜剧组织Monty Python命名,该语言对许多教程和其他材料都有一种有趣方法。 开发人员声称他们喜欢Python功能品种和质量。...更具体地说,chatbots是ANI,人工狭义智能。他们不像人类那么聪明。此外,chatbots可以执行有限任务。然而,这些功能仍然使我们生活容易。

    1K20

    使用 Python 创建 AI 比你想象轻松

    LISP是创造AI最流行语言之一。其最佳功能包括垃圾回收,统一语法,动态类型和交互式环境。LISP代码是s表达式并由列表组成。 另一种广泛流行AI编程语言是Prolog。...Python是在20世纪80年代末创建。它实现始于1989年。Python哲学是非常有趣,因为它包括几个格言。显式不是隐式,简单不是复杂。Python创作者珍视美丽设计和外观。...他们喜欢复杂。更重要是,他们声称可读性是计数。Python有一个干净语法和语法。它是自然和流利。正如Python开发人员所说,语言目标是使用酷。...以英国喜剧组织Monty Python命名,该语言对许多教程和其他材料都有一种有趣方法。 开发人员声称他们喜欢Python功能品种和质量。...更具体地说,chatbots是ANI,人工狭义智能。他们不像人类那么聪明。此外,chatbots可以执行有限任务。然而,这些功能仍然使我们生活容易。

    62530

    「译文」给讨厌YAML的人10个写YAML建议

    花点时间研究一下你最喜欢文本编辑器。了解编辑器或其社区如何使 YAML 变得简单,并在您工作利用这些特性。你不会后悔。 1....在 POSIX shell ,如果命令返回 0 以外任何内容,&& 就会失败,因此在成功时,echo 命令会清楚地表明这一点。这种策略有些肤浅,但有些用户喜欢确保命令正确运行,不是默默地失败。...还有许多其他例子,而且有许多在线转换器和本地解析器,所以当数据开始看起来更像一个清单不是标记时,请不要犹豫重新格式化数据。 4....任何好文本编辑器都允许定义多个空格不是制表符,所以这个选择不会对 tab 键粉丝产生负面影响。 您可能非常清楚,制表符和空格本质上是不可见。...有时配置文件会自动增长,最好将其重构为简单 Lua 或 Python 脚本。 YAML是一个很棒工具,因其极简和简单而在用户很受欢迎,但它不是工具包唯一工具。

    1.4K30

    Python垃圾回收机制

    在这里插入图片描述 内存管理通常分为三个区域 内存管理通常分为三个区域,尽管区别有点模糊: 硬件内存管理 操作系统内存管理 应用程序内存管理 管理内存基本问题是知道什么时候保留它包含数据,什么时候丢弃它...在理想世界,大多数程序员都不必担心内存管理问题。不幸是,在手动和自动内存管理,不良内存管理实践可以通过多种方式影响程序健壮性和速度。...自动内存管理 自动内存管理优点是: 程序员可以自由地处理实际问题; 模块接口清洁; 内存管理错误更少; 内存管理通常更有效。...CPython通过混合使用引用计数和不移动 标记清除 垃圾收集来管理内存。引用计数可确保在对象引用计数降至零时迅速删除对象,垃圾回收器则回收循环数据结构。...Python垃圾回收是以引用计数为主,分代收集为辅。引用计数缺陷是循环引用问题。 在Python,如果一个对象引用数为0,Python虚拟机就会回收这个对象内存。

    67431
    领券