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

为什么在Common Lisp中需要偶数个关键字参数?

在Common Lisp中需要偶数个关键字参数是因为关键字参数是以关键字-值对的形式传递给函数的,而每个关键字都需要对应一个值。为了确保每个关键字都有对应的值,需要传递偶数个参数。

在Common Lisp中,关键字参数的语法是使用冒号前缀的关键字作为参数名,例如:key。关键字参数的优势在于可以提高函数的可读性和可维护性,因为通过关键字可以清晰地指定参数的含义,避免了参数顺序的混乱。

关键字参数在许多场景下都非常有用,例如:

  1. 可选参数:使用关键字参数可以方便地指定函数的可选参数,而不需要记住参数的顺序。例如,一个函数可以接受多个可选参数,如:color:size:style等,使用关键字参数可以更清晰地指定这些参数。
  2. 扩展性:关键字参数可以方便地扩展函数的功能,因为可以添加新的关键字参数而不影响已有的调用代码。这样可以避免因为参数顺序的改变而导致调用代码需要修改。
  3. 可读性和可维护性:使用关键字参数可以提高代码的可读性和可维护性,因为通过关键字可以清晰地表达参数的含义,使代码更易于理解和修改。

腾讯云提供了一系列与云计算相关的产品,包括云服务器、云数据库、云存储等。具体推荐的产品和产品介绍链接地址可以参考腾讯云官方网站。

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

相关·内容

初学python,调用固定参,不固定参

*d1) 说明:字典的键名和形参名必须一 字典的键名必须为字符串,并符合关键字的命名 字典的键名要在形参存在 (5)函数的综合 传参方式,能确定每个形参否能唯一匹配一个实参的情况也可以任意传参...#Common args: hello #Rest args: ('world', 0) 不难看出,上述方式,星号参数把接收的参数合并为一个元组。...第四种方式,但是有时候我们想把元组值就作为星号参数参数值,那么该怎么办呢?好办,元组值前加上“”即可,不过此时,就不能在加了“”的元组后,追加任何值了。...("hello") Common args: hello Double args: {} 第二种方式,传多个参数(个数大于或等于函数定义时的参数个数)。...即,双星号参数接收的参数作为字典。 第三种方式,有时候我们想把字典值就作为星号参数参数值,那么该怎么办呢?同单星号参数字典值前加上“**”,同时其后不能添加任何值。

1.6K20

Clojure与LispClojure与Lisp

程序运行的时候取修改程序,而不需要重新编译或重启 程序....觉得必须实现共同需要的一个方法,使计算机能够处理链表的符号数据,允许语言的处理、信息存入和检索、定理证明的过程机器化。IBM是首先对人工智能开发有兴趣的商业机构之一。...1984年,改良自MacLisp、集各版本大成、跨平台、且被目为事实标准的Common Lisp诞生。至1994年,美国国家标准学会(ANSI)对Common Lisp语言进行了标准化。...2 函数也是一种数据类型 Lisp语言中,函数与整数或字符串一样,也属于数据类型的一种。它有自己的字面表示形式(literal representation),能够储存在变量,也能当作参数传递。...在读取期运行代码,使得用户可以重新调整(reprogram)Lisp的语法; 在编译期运行代码,则是Lisp宏的工作基础; 在运行期编译代码,使得Lisp可以Emacs这样的程序,充当扩展语言(extension

1.9K30

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

没人能给我演示这些东西是如何应用的, 因为这些东西一般来说只有大型系统才会用到。我争辩说, 这些东西传统语言一样办得到。和别人争论了数个小时之后, 我最终还是放弃了学Lisp的念头。...一个问题是, 为什么要用代码来写代码呢? 实际的编程, 怎样做到这一点呢? 到底元编程是什么意思? 你大概已经听说过这些问题的答案, 但是并不懂得其中缘由。...同样的,设想一下, Ant是把XML数据当作自己的参数Lisp, 我们给表加一个前缀'来表示数据。...例如, 上面曾经将过的C的求三次方的宏, 用Lisp来写是这样子: (defmacro triple (x) `(+ ~x ~x ~x)) (译注: Common Lisp, 此处的单引号应当是反单引号..., 意思是对表不求值, 但可以对表某元素求值, 记号~表示对元素x求值, 这个求值记号Common Lisp应当是逗号。

1.7K60

Emacs 折腾记

我工作倒并没有用得到 Lisp 的地方,但是最近眼前晃过的一些书,比如《计算机程序的构造和解释》、《码农》杂志第 13 期,都对这门古老的语言推崇备至,还有垠神也撰文《Lisp 已死,Lisp 万岁!...Common Lisp 开发环境 学习 Common Lisp 是使用 Emacs 最主要的任务,配好了文本编辑,当然得先把 Common Lisp 开发环境配置好了。...本来什么也不用配置的情况下 M-x ielm 就能进入一个 Emacs Lisp 的 REPL,但是它与 Common Lisp 毕竟还是有区别,所以还是另配置一个。...然后如何运行当前 py 文件这件事上遇到些问题。 Vim 我一直是用 :!...start python test.py 文件名、Buffer 和命令的渐进提示 编程环境下需要自动补全,非编程环境下,比如切换 Buffer,打开文件,输入函数命令等,同样需要

1.9K10

一文读懂基于 Yaegi 解释器开发可热插拔的 Traefik 插件

词法分析器扫描源代码,将代码分解成一个个标记,每个标记代表一个关键字、标识符、常量或运算符等。...与上述相比较,Golo 是一个更加复杂和功能更为丰富的 Lisp 方言,其语法和特性与 Common Lisp 有很多相似之处。...— 03 — 什么是 Yaegi 解释器以及为什么 Golang 或 Traefik 需要?...它可以应用程序嵌入 Go 脚本,实现动态配置和扩展。此外,Yaegi 还支持沙箱环境运行代码,避免了潜在的安全风险。... Yaegi 的设计实现,主要包含以下几个方面的内容,仅供参考: 1. 词法分析器:Yaegi 首先需要将输入的 Go 代码转化为词法单元,这个过程称为词法分析。

1.6K51

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

Lisp语言中,函数与整数或字符串一样,也属于数据类型的一种。它有自己的字面表示形式(literal representation),能够储存在变量,也能当作参数传递。...区分表达式和语句,Fortran I是很自然的,因为它不支持语句嵌套。所以,如果你需要用数学式子计算一个值,那就只有用表达式返回这个值,没有其他语法结构可用,因为否则就无法处理这个值。...我们需要写一个函数,它能够生成累加器,即这个函数接受一个参数n,然后返回另一个函数,后者接受参数i,然后返回n增加(increment)了i后的值。...和Ruby的版本,有更多的语法元素,因为Perl语言中,你不得不手工提取参数。...^[:i| s := s+i. ] 因为Smalltalk,局部变量(lexical variable)是有效的,但是你无法给一个参数赋值,因此不得不设置了一个新变量,接受累加后的值。

1.2K60

627. 最长回文串

这个题我踩了一个大坑,我先说我一开始想的思路啊,是这样的:要够成回文串除了最中间可以是奇数个相同的字母以外,两边的都必须是对称的,那么我用map统计每个字母出现的次数,然后出现偶数次的都可以加到回文串...,出现奇数个的我把奇数最大的那个加入回文串,这样就可以得到需要的数目了啊。...} return res+ji; // write your code here } 测试的时候一半的数据都通过了,但是还是出现了问题,我一开始也想不通为什么...,甚至我把每个字母和次数都打印出来也没有看出端倪,于是和振哥交流了一下,我去泡了袋面吃,然后振哥说发现为什么了,知道原因之后只能说自己陷入自己挖的坑里了。...这样一想就知道错在哪里了,原程序上要进行一些改动,着重要考虑两种情况,并不是简单的把奇数统计那里改一下就行了。 1:考虑全的情况。

53620

CRC校验怎么算?

CRC是众多校验方式的一种,校验的目的是为了检测数据的正确性。详细介绍CRC计算之前,我们先来看两个常见的较为简单点的校验:串口通信中的奇偶校验和身份证号码的MOD 11-2校验。...先看奇偶校验,假设要发送8位数据10110101,奇校验是再加一位校验位,让这9位数据的1的个数为奇数。 10110101->101101010 奇校验 校验是让这9位数据1的个数为偶数。...这也是为什么要除以11而不是10的原因,其背后的数据理论推理已经超出了我的能力范畴,这里不再介绍了。...我在网上找了两个计算CRC的软件,输入同样的数据,选择同样的算法,得到的结果一样, 这两个软件的对应关系如下: 把CRC Calculator Info 的这几个参数弄明白,CRC的过程你也就清楚了...当全为1时,表示算法开始前对数据的前CRC位数(高位)先和对应位数个1进行异或(即:前CRC位数的值按位取反),再在后面补上CRC位数个0,才进行后续计算。

3.1K20

几分钟内学习 Clojure

Clojure 是JVM上的一个LISP语言变种,它比Common Lisp更强调纯函数式编程,但提供了一些STM工具以处理它所引入的状态问题。...Clojure源码托管:github 在线练习编译环境: himera learnclojure.clj 示例: ; 分号作为注释的开始 ; Clojure 用一种把元素用括号括起来的像列表一样的方式来书写...所有的函数都有返回值,就是它的最后一个表达式 (fn [] "Hello World") ; => fn ; (你需要额外的括号去调用它) ((fn [] "Hello World")) ; => "...; 从一个map检索一个值,可以直接把这个map当做函数调用(这个NB) (stringmap "a") ; => 1 (keymap :a) ; => 1 ; 关键字也可以当做函数来调用,从一个...(这也是为什么推荐使用keywords) ;("a" stringmap) ; => Exception: java.lang.String cannot be cast to clojure.lang.IFn

1.7K40

汉诺塔——各种编程范式的解决

这也是为什么很多信息竞赛是用C++答题。   ...Scheme实现   Scheme作为一种Lisp,支持多种范式,最主要当然是函数式编程,采用lambda演算作为其计算手段。Lisp一直是我认为必学的语言。...而我心里越来越削弱Common Lisp的地位,觉得Scheme更为纯正,纯就纯它至简的设计,Common Lisp还要分函数和变量两个名字空间,这时常让我觉得没有真正体现数据和函数一家的意思。   ...现实的玩法   以上讨论递归,虽然可以解决问题,但是似乎并不适合于现实的汉诺塔游戏,人脑不是计算机,不太适合干递归的事情。   ...2.可以证明“现实的玩法”的正确性吗?对于“现实的玩法”,可以用计算机语言实现吗?

1.9K30

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

while True     if a = 0       return b     end     a <= a-1     b <= b+1   end   end   所有的尾递归都可以用循环表示,只需要把传入的参数当成是状态...Common Lisp   测完Scheme,再来测Scheme的本家兄弟,另外一种Lisp——Common Lisp   先用Common Lisp实现add,因为Common Lisp将数据和过程用不同的命名空间...RESET   因为没有尾递归优化的规定,所以对于那种无限循环,Common Lisp只能选择迭代才能保证不崩栈,比如使用do。...sbcl是Common Lisp的另外一个实现,在这个实现,我们使用第一个add函数的版本,没有发生崩栈。...也终于给了我们一个更为靠谱的Common Lisp的实现。

2.6K20

Emacs 折腾记

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 我一直是用 :!...start python test.py 文件名、Buffer 和命令的渐进提示 编程环境下需要自动补全,非编程环境下,比如切换 Buffer,打开文件,输入函数命令等,同样需要

1.3K20

Runtime 的消息机制

为什么Objective-C里会有消息机制 这就是语言的基因问题了Smalltalk,之前一本叫《代码的未来》了解到Smalltalk是一门比较古老的语言, Smalltalk 中一切皆对象,一切调用都是发消息...它之前有Lisp 和 FORTRAN、COBOL并称为“古代编程语言三巨头”。...发送消息的过程 Objective-C,如果向某个对象传递消息,那就会在运行时使用动态绑定(dynamic binding)机制来决定需要调用的方法。...这是一个参数个数可变的函数,第一参数代表接收者,第二个参数代表选择子(OC函数名),后续的参数就是消息(OC函数调用)的那些参数 举例来说: id return = [git commit:parameter...(fast map),这样以来这个类一些频繁调用的方法会出现在fast map ,不用再去一遍一遍的方法列表搜索了。

1K50

奇偶校验器设计(奇偶校验与奇偶检测,XOR法和计数器法|verilog代码|Testbench|仿真结果)

需要指出当出现偶数个错误时,奇偶校验是无法检测此时电路出现传输错误。例如,发送的数据为8’b1010_1011此时计算出的校验值是1。...对接收的数据进行校验计算,得到的结果仍然为1,这与收到的校验值是相同的,接收电路无法检测出接收数据岀现的错误。 奇偶校验位有两种类型:校验位与奇校验位。...图片 简单理解奇偶校验: 奇校验:原始码流+校验位 总共有奇数个1 校验:原始码流+校验位 总共有偶数个1 二、XOR法 2.1 XOR法 题目:采用XOR法试写一个发送端奇偶校验器,发送端会输入一段...若是奇校验则原始码流+校验位总共有奇数个“1”;若是校验则原始码流+校验位总共有偶数个“1”。 设计方法主要有XOR法和计数器法。...XOR法最简单,只需要对数据使用按位异或,输出为“0”代表数据“1”位偶数个;计数器法最直观,计数器数值的奇偶性表示对应数据“1”个数的奇偶。

3.6K40

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

与其他Lisp一样,Clojure认为代码即数据,同时有复杂的宏系统。 Clojure 的理念和特性 Clojure是什么,为什么有人要学这门语言?...它第一个对外的发行版是2007年秋季的时候发布的,2009年5月发行了第一个稳定版,到这个时候,它已经培育了一个活跃的、充满热情的社区,一个欣欣向荣的开发工具和类库的生态系统,它们被用在迅速增长的一系列专业的应用程序...Clojure虽然有很强的学术背景支持,但是绝不是一门只象牙塔的语言,每天都有众多开发者各自的开发领域内使用它。 动态而强有力 (没错,它是lisp!)...你程序运行的时候取修改程序,而不需要重新编译或重启程序。...它保留了 lisp 的思想和哲学,并同时清除了过去的很多限制. Clojure 高速、干净、具有优先能力和优雅的特征. 但是没有改变lisp "代码也是数据" 的哲学.

1.3K10

【51单片机】想学会串口通信,你需要知道这些(串口通信实验前置知识)(13)

51单片机不支持流控制 ,因此我们了解即可 五.专业术语:通信方式&同步异步&总线&通信接口&串口参数相关 1.全双工,半双工,单工 全双工:通信双方可以同一时刻互相传输数据 半双工:通信双方可以互相传输数据...数据帧 校验位 如下图串口助手所示: 校验分为奇校验和校验 (常见)和 0,1校验 停止位:数据发送完,有个后摇 ※【奇偶校验原理与规则】 规则总结: 利用奇/校验,保证数据1的个数为奇/;...8位数据+1位校验位校验位 校验:保证数据个数为偶数,检验位补0/1 奇校验:保证数据个数为奇数,检验位补0/1 例如:奇校验,数据中有2个1,2是偶数,校验位补1,保证它是奇数个1 计算接收到的数据...,1的奇/和我们采用的奇/校验方式是否一致,来保证数据接受正确与否 举例演示 我们需要的数据排列是:0000 0011,我们如何来检验它正确?...利用奇校验 我们给他补上一个校验位(8->9位),我们原来的数据中有2(偶数)个1,所以补上1,保证数据为奇数;最终数据为0000 0011 1,现在我们数据中有奇数个1 串口接收到数据后,数据为0000

74610

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

没人能给我演示这些东西是如何应用的, 因为这些东西一般来说只有大型系统才会用到。我争辩说, 这些东西传统语言一样办得到。和别人争论了数个小时之后, 我最终还是放弃了学Lisp的念头。...一个问题是, 为什么要用代码来写代码呢? 实际的编程, 怎样做到这一点呢? 到底元 编程是什么意思? 你大概已经听说过这些问题的答案, 但是并不懂得其中缘由。...同样的, 设想一下, Ant是把XML数据当作自己的参数Lisp, 我们给表加一个前缀'来表示数 据。...例如, 上面曾经将过的C的求三次方的宏, 用Lisp来写是这样子: (defmacro triple (x) `(+ ~x ~x ~x)) (译注: Common Lisp, 此处的单引号应当是反单引号..., 意思是对表不求值, 但可以对 表某元素求值, 记号~表示对元素x求值, 这个求值记号Common Lisp应当是逗号。

1.4K20

PHP 是最糟糕的编程语言?

我以前做过的很多工作和现在正在做的这份工作,我非常高兴能够将 PHP 作为核心编程语言。...这场争论的关键是用 LISP 和 C 作为例子来说明为什么“更糟就是更好”。...对于 LISP 程序员 Gabriel 来说,LISP 是一种比 C 更好的语言,速度和 C 一样快,而且 Common LISP 的设计、开发和标准化已经花了很多年。...LISP 易于交互,你可以通过各种方式与它交互。希望从 Fortran 调用 LISP?你可以从 Fortran 调用 LISP 并将数据传入,反之亦然。...LISP 本身并非一种单一的语言,而是一个语言家族。尽管 Common LISP 被设计成一种标准,但是 LISP 本身的实现方式是根据需要完成的各种工作而存在的。

1.8K20
领券