首页
学习
活动
专区
工具
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.5K110
  • 有比JSON更好的东西吗?

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

    4.9K30

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

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

    1.2K60

    用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都是值得阅读的源码,喜欢的小伙伴一定要去瞅瞅。

    95540

    各种编程语言的优缺点

    但是这二者是同等能力的。它们同样精确的表示了计算机能干什么。 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 语言在其现代小众领域(操作系统、设备驱动、低级系统编程)中更多的是关于控制而不是性能。

    27830

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

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

    1.3K10

    Paul Graham:梦寐以求的编程语言

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

    93420

    ​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),你都不能忽视这样一个事实: 一半的互联网都运行在这种美妙的互联网语言上。

    62240

    影响Scala语言设计的因素列表

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

    1.2K70

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

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

    27930

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

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

    19810

    惊呆了,老外竟然用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!”程序,但请不要和上面清单上的语言重复哦。

    80520

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

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

    1.1K20

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

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

    62830

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

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

    1.5K31

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

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

    1.5K30

    又到年底了,明年该学点啥呢?

    前几天,在知乎上看到这样一个问题: 问 “Java、C++、Python、Go、Js等语言,未来几年内,学哪个更容易找工作?...2017年IEEE发布编程语言排行榜中,Python高居首位。 国务院都亲自表示要重视人工智能的发展,而它的发展必然会给Python提供更多更广阔的发挥舞台。单是这一点,其他语言就相形见绌了。...所谓的“未来”,你不知道是什么时候,你等的起么?就算Go真火了,也无法预料它在国内能否大火,国内的开发群体不太喜欢换工具。 关于“地域问题”,顺带提一句,毕竟你不一定要生活在北上广,也不一定做互联网。...一般用Go的公司门槛都比较高。Go经常用在高并发,低延迟的系统。有这种需求的公司,还需要对操作系统,分布式,缓存,负载均衡等有一定了解,不是学了一门语言就能进去的。...Clojure作为Lisp系的最佳表现,有Storm的招牌应用,亦可称霸一方。 只是,你是为了找工作,这些市场需求相对来说小得可怜。等你以后有了经验,再来学这些也不晚。 7 PHP,2333分。

    79860
    领券