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

如何在common lisp中递归地追加一个列表?

在Common Lisp中,可以使用递归的方式来追加一个列表。下面是一个示例代码:

代码语言:txt
复制
(defun append-list (list1 list2)
  (if (null list1)
      list2
      (cons (car list1) (append-list (cdr list1) list2))))

(append-list '(1 2 3) '(4 5 6))

上述代码定义了一个名为append-list的函数,它接受两个列表作为参数。如果第一个列表为空,则直接返回第二个列表。否则,将第一个列表的第一个元素与递归调用append-list函数来处理剩余的元素,并将结果与第二个列表进行拼接。

在示例中,(append-list '(1 2 3) '(4 5 6))的结果将是(1 2 3 4 5 6)

需要注意的是,递归操作可能在处理大型列表时导致栈溢出。为了避免这种情况,可以使用尾递归优化或迭代方式来实现列表追加操作。

关于Common Lisp的更多信息和学习资源,可以参考腾讯云的Common Lisp产品介绍页面:Common Lisp产品介绍

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

相关·内容

SCIP学习笔记

语言,但是随着工业界越来越多的应用函数编程语言,Clojure、Scala、Racket,以及软件开发使用并发的趋势(见文章[2]),重读SCIP是很有意义的。...Lisp基本语法 Lisp的原始定义在John McCarthy1960发表的论文[3]。 Lisp[4]是一个语言族,包括Common Lisp和Scheme,二者区别见[5]。...) 以上是Scheme的主要语法,可以容易而优雅生成语法树,没有语法糖。那么递归和迭代怎么用?使用上面的语法规则即可。...构造数据抽象 闭包 (这里指的不是匿名函数) 是在处理符合数据一个关键思想:用于组合数据对象的粘合剂,不但能用于组合基本的数据对象,同样也可以用复合数据的对象。...(car__ (cons__ 33 99)) ;33 (cdr__ (cons__ 33 99)) ;99 序列(列表) 可看做嵌套的序对: (list ...

1.5K40

Clojure与LispClojure与Lisp

(艾伦·凯) "任何C或Fortran程序复杂到一定程度之后,都会包含一个临时开发的、只有一半功能的、不完全符合规格的、到处都是bug的、运行速度很慢的Common Lisp实现。"...觉得必须实现共同需要的一个方法,使计算机能够处理链表的符号数据,允许语言的处理、信息存入和检索、定理证明的过程机器化。IBM是首先对人工智能开发有兴趣的商业机构之一。...3 递归 Lisp是第一种支持递归函数的高级语言。 4 变量的动态类型 在Lisp语言中,所有变量实际上都是指针,所指向的值有类型之分,而变量本身没有。...在其他语言中,这种形式只是经过解析在后台产生,但是Lisp直接采用它作为表达形式。它由列表构成,而列表则是Lisp的基本数据结构。 用一门语言自己的数据结构来表达该语言,这被证明是非常强大的功能。...Clojure 还是一个动态类型的语言 我们可以选择添加类型信息来提高代码的关键路径的性能。

1.9K30

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

这里,可以采用一个编译技术,就是尾递归优化,其一般情况是,如果一个函数的计算遇到了完全转化成另一个函数调用的情况,那么栈的当前函数部分的信息可以完全抹去,而替换为新的函数。...Common Lisp   测完Scheme,再来测Scheme的本家兄弟,另外一种Lisp——Common Lisp   先用Common Lisp实现add,因为Common Lisp将数据和过程用不同的命名空间...RESET   因为没有尾递归优化的规定,所以对于那种无限循环,Common Lisp只能选择迭代才能保证不崩栈,比如使用do。...sbcl是Common Lisp的另外一个实现,在这个实现,我们使用第一个add函数的版本,没有发生崩栈。...也终于给了我们一个更为靠谱的Common Lisp的实现。

2.6K20

人工智能程序设计语言主要有哪些?

一般来说,人工智能语言应具备如下特点: ·具有符号处理能力(即非数值处理能力); ·适合于结构化程序设计,编程容易; ·具有递归功能和回溯功能; ·具有人机交互能力; ·适合于推理; ·既有把过程与说明式数据结构混合起来的能力...近百种人工智能语言中,只有LISP和后起之秀Prolog是人工智能研究和应用占重要地位的两种人工智能程序设计语言。...同样,现代的AI专业人员如果不能同时大致通晓LISP和Prolog,也犹如一个残疾人,因为就广义来说,这两种人工智能的主要语言的知识都是必不可少的。”...(3)概括说,计算机语言的发展正是一个从HOW型低级语言向WHAT型高级语言进化的过程.在HOW型语言中,程序编制者必须详细说明运算是怎样(HOW)一步一步进行的;而在WHAT型语言中,程序编制者只需简单说明要做的事情是什么...…现代的LISP语言是这些语言的佼佼者,因为采用Common Lisp格式的Lisp具有非凡的表现力,但是如何做某件事情仍然是有待于Lisp程序编制者来表达的东西.相反,Prolog是一种明显冲破了HOW

2.2K120

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

递归Lisp是第一种支持递归函数的高级语言。   4. 变量的动态类型。在Lisp语言中,所有变量实际上都是指针,所指向的值有类型之分,而变量本身没有。...符号实际上是一种指针,指向储存在哈希表的字符串。所以,比较两个符号是否相等,只要看它们的指针是否一样就行了,不用逐个字符比较。   8....在其他语言中,这种形式只是经过解析在后台产生,但是Lisp直接采用它作为表达形式。它由列表构成,而列表则是Lisp的基本数据结构。 用一门语言自己的数据结构来表达该语言,这被证明是非常强大的功能。...你实际上就是在做同样的事,只不过划出了一个独立的区域,保存累加器函数,区别只是保存在对象的一个属性,而不是保存在列表(list)的头(head)。...、到处都是bug的、运行速度很慢的Common Lisp实现。"

1.2K60

Lisp语言简介_c++是什么语言

这个比较小众的编程到底是什么~ ————————————————————————— LISP(全名LISt Processor,即列表处理语言),由约翰·麦卡锡在1960年左右创造的一种基于λ演算的函数式编程语言...LISP有很多种方言,各个实现的语言不完全一样。1980年代Guy L. Steele编写了Common Lisp试图进行标准化,这个标准被大多数解释器和编译器所接受。...LISP语言的主要现代版本包括Common Lisp和Scheme。 基本介绍 LISP 是第一個函數型程式語言,区别于C/Java等命令型编程语言。...Lisp的表达式是一个原子(atom)或表(list),原子(atom)又包含符號(symbol)與數值(number);表是由零个或多个表达式组成的序列,表达式之间用空格分隔开,放入一对括号:...如果一个表达式是一个表,那么我们把表的第一个元素叫做操作符,其余的元素叫做自变量。

2.3K20

“数”的起源 2.1 数据漫话史—抽象、表示与存储

Lisp列表处理语言,全名是 List Processor。...Lisp 只使用了很少语法 元素就定义了一套强大的语言,它的主要数据结构就是列表,只使用很少的操作符来处理列 表,而这些操作符本身就是一个函数。...Lisp 的函数 rest 的功能就是去除列表的第一个元素返回剩余元素构成的表,这样,这个新的列表所表示的数 就是“之前一个数”了: (my-number (rest lst)) 下面运行 my-number...图 2-2 Lisp程序--数的序列定义示例 注:以上程序使用 Common Lisp 编写,在 LispBox 调试通过。 读到这里,聪明的您可能发现,这不就是求一个列表的长度么?...假设这个列表的每一个元素所在的位置表示它所对应的数,那么这个列表就是存储这 些“数”的容器,假设它所在的位置可以通过一个指针迅速定位,通过移动指针的位置来标 记写入或者读取一个数。

78420

Emacs 折腾记

我工作倒并没有用得到 Lisp 的地方,但是最近眼前晃过的一些书,比如《计算机程序的构造和解释》、《码农》杂志第 13 期,都对这门古老的语言推崇备至,历数现代 Lisp 方言的先进性,再者我也一直有学习一门函数式编程语言的想法...在搜索网友们对此的经验之谈的时候,自然而然,目光逐渐聚集到 Emacs 这个使用 Emacs Lisp 作为扩展语言的神的编辑器上。...Common Lisp 开发环境 学习 Common Lisp 是使用 Emacs 最主要的任务,配好了文本编辑,当然得先把 Common Lisp 开发环境配置好了。...本来什么也不用配置的情况下 M-x ielm 就能进入一个 Emacs Lisp 的 REPL,但是它与 Common Lisp 毕竟还是有区别,所以还是另配置一个。...在 ~/.emacs 文件里加上: M-x slime 就可以进入到 REPL 进行 Common Lisp 的学习了。

1.3K20

逻辑式编程语言极简实现(使用C#) - 4. 代码实现(完结)

流(Stream)计算模式 老明在白板上写下“Stream”,说:“Stream最常见的用途是用来表示数量未知或者无穷的列表。在代码怎么定义流呢?...所以相应的,我们需要一个方法,这个方法把两个Stream s1和s2的元素交替拼接组成一个“长”Stream。 首先,如果s1是空Stream,那么“长”Stream显然就是s2。...举例来说,假设st是g1所包含的Stream一个替换。那么把g2蕴含的条件追加到st上,其结果为g2(st)。...否则,结果是s1的第一个元素追加g2,再拼上s1的剩余Stream Bind g2的结果。这仍是递归定义,不过是借助的Append方法进行Stream构造。...俗话说得好,C#只是恰饭,真正的快乐还得看Scheme/Lisp

21920

5.3 数据结构广义表

01广义表的定义 1、广义表是线性表的推广,也有人称其为列表(lists,用复数形式以示与统称的表list的区别)。广泛用于人工智能等领域的表处理语言LISP语言,把广义表作为基本的数据结构。...02广义表的存储结构 1、由广义表(a1,a2,a3...an)的数据元素可以具有不同的结构(或是原子,或是列表),因此难以用顺序存储结构表示,通常采用链式存储结构,每个数据元素可用一个结点表示。...2、由于列表的数据元素可能为原子或列表,由此需要两种数据结构的结点:一种是表结点,用以表示列表;一种是原子结点,用以表示原子。 3、若列表不空,则可分解成表头和表尾。...03广义表 1、递归函数结构清晰、程序易读,且容易证明正确性,因此是程序设计的有力工具。 2、有时递归函数的执行效率很低,因此使用递归应该扬长避短。在程序设计,不应该一味追求递归。...6、广义表的深度定义为广义表括弧的重数,是广义表的一种量度。 7、任何一个非空广义表均可分解成表头和表尾,反之,一对确定的表头和表尾可唯一确定一个广义表。

7462723

由字符串反转(使用递归)引申出来一道Java面试题

为了快速了解他们的编程能力,我想到了一个关于字符串反转的问题,有人用这道题取得不错的效果,这道题的答案有很多种,因此这给了你足够的空间去考察候选者的技能,我自己思考了会儿,找到好几种答案如何用Java...处理问题: 问他代码什么地方有bug,即使没有。或者代码怎么会报错,他的答案至少可以引出一个讨论关于如何处理空值的话题来。...(Recursion): 之后要求应聘者在反转的问题上写一个递归的方案(这至少是漂亮的,但至少可用) ?...在讨论,开发者说“Easy”,他在整个大学都在用Lisp语言,之前我还不知道,现在听起来真是个极好的消息。你还可以询问在上面代码结束递归的停止条件。...SringBuffer追加的方法: ? 也许候选人还知道棘手的XOR swapping solution方法。

40420

颠覆者的游戏:程序语言

90年代阴差阳错在互联网浪潮成长起来的java成了一个颠覆者。初期定位在家电产品的java,如果不是赶上互联网第一浪的好时候,早不知道死几回了。...它的价值主张也在易用性,不过另辟蹊跷,走的是frontend/backend一致性开发的路子(其他异步io,event driven并非杀手锏)。短短几年,node.js就催生出一个巨大的生态圈。...递归效率低?no,no,no,这已是一个巨大的认知错误。 云时代的functional language,走的最远的当属erlang/BEAM(erlang的VM)。...最后一个颠覆者是lisplisp算得上是程序语言的鼻祖,一直是其他语言的学习对象。Paul Graham曾经轻蔑说:「编程语言现在的发展,不过刚刚赶上1958年Lisp语言的水平」[6]。...lisp的诸多思想,代码即数据,数据即代码,是最具破坏性的。通过 quote,unquote,在代码的语法树上辗转腾挪,你几乎是在以上帝视角来撰写程序。

1K80

由字符串反转(使用递归)引申出来一道Java面试题

为了快速了解他们的编程能力,我想到了一个关于字符串反转的问题,有人用这道题取得不错的效果,这道题的答案有很多种,因此这给了你足够的空间去考察候选者的技能,我自己思考了会儿,找到好几种答案如何用Java...处理问题: 问他代码什么地方有bug,即使没有。或者代码怎么会报错,他的答案至少可以引出一个讨论关于如何处理空值的话题来。...(Recursion): 之后要求应聘者在反转的问题上写一个递归的方案(这至少是漂亮的,但至少可用) ?...在讨论,开发者说“Easy”,他在整个大学都在用Lisp语言,之前我还不知道,现在听起来真是个极好的消息。你还可以询问在上面代码结束递归的停止条件。...SringBuffer追加的方法: ? 也许候选人还知道棘手的XOR swapping solution方法。

48710

Emacs 折腾记

我工作倒并没有用得到 Lisp 的地方,但是最近眼前晃过的一些书,比如《计算机程序的构造和解释》、《码农》杂志第 13 期,都对这门古老的语言推崇备至,还有垠神也撰文《Lisp 已死,Lisp 万岁!...在搜索网友们对此的经验之谈的时候,自然而然,目光逐渐聚集到 Emacs 这个使用 Emacs Lisp 作为扩展语言的神的编辑器上。...Common Lisp 开发环境 学习 Common Lisp 是使用 Emacs 最主要的任务,配好了文本编辑,当然得先把 Common Lisp 开发环境配置好了。...本来什么也不用配置的情况下 M-x ielm 就能进入一个 Emacs Lisp 的 REPL,但是它与 Common Lisp 毕竟还是有区别,所以还是另配置一个。...Update: 后来经验证,发现实际上是 sbcl 在安装过程写的环境变量没有生效导致的,sbcl 在安装过程中会设置两个环境变量,新建一个 SBCL_HOME 值为 sbcl 安装路径,在 PATH

1.8K10

编程语言进化史《禅与计算机程序设计艺术》 陈光剑

汇编语言保持了机器语言的优点,具有直接和简捷的特点,可有效访问、控制计算机的各种硬件设备,磁盘、存储器、CPU、I/O端口等,且占用内存少,执行速度快,是高速度和高效率的程序设计语言。...高级语言并不是特指的某一种具体的语言,而是包括很多编程语言,流行的java,c,c++,C#,pascal,python,lisp,prolog,FoxPro,易语言,中文版的C语言习语言等等,这些语言的语法...典型的函数式语言 Lisp、Haskell、ML、Scheme 、F#等。 逻辑式语言。这种语言的语义基础是基于一组已知规则的形式逻辑系统。这种语言主要用在专家系统的实现。...Multi-paradigm languages such as Ada, C++, Common Lisp, Object Pascal....Most languages using less common paradigms Functional languages such as Lisp and Haskell.

1.5K10

《Kotin 极简教程》第8章 函数式编程(FP)(1)第8章 函数式编程(FP)《Kotlin极简教程》正式上架:

Lisp由约翰·麦卡锡(John McCarthy,1927-2011)在1958年基于λ演算所创造,采用抽象数据列表递归作符号演算来衍生人工智能。...他的项目需要用某种形式语言来编写语句,以记录关于世界的信息,而他感觉列表结构这种形式挺合适,既方便编写,也方便推演。于是就创造了LISP。...函数式语言提倡在有限的几种关键数据结构(list、set、map)上 , 运用函数的组合 ( 高阶函数) 操作,自底向上地来构建世界。 当然,我们在工程实践,是不能极端追求纯函数式的编程的。...闭包包含以下两个组成部分: 要执行的代码块(由于自由变量被包含在代码块,这些自由变量以及它们引用的对象没有被释放) 自由变量的作用域 在PHP、Scala、Scheme、Common Lisp、Smalltalk...这样就出现了一个问题 —— 如何在Lambda Calculus实现递归函数,即匿名递归函数。Haskell B.

1.4K20
领券