首页
学习
活动
专区
工具
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.6K40

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.3K120

为什么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 调试通过。 读到这里,聪明的您可能发现,这不就是求一个列表的长度么?...假设这个列表的每一个元素所在的位置表示它所对应的数,那么这个列表就是存储这 些“数”的容器,假设它所在的位置可以通过一个指针迅速定位,通过移动指针的位置来标 记写入或者读取一个数。

79420

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

24520

5.3 数据结构广义表

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

7742723

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

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

41720

颠覆者的游戏:程序语言

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方法。

49810

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

汇编语言保持了机器语言的优点,具有直接和简捷的特点,可有效访问、控制计算机的各种硬件设备,磁盘、存储器、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.6K10

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.9K10

《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
领券