(cons 'a (cons 'b 'c)) 和 (cons 'a '(b.c)) 之间的 Lisp 区别

2024-05-07

有什么区别:

(cons 'a (cons 'b 'c)) ;; (A B . C)

and

(cons 'a '(b.c)) ;; (A B.C)

我需要使用 cons 创建以下列表 ((a.b).c),所以我试图理解“.”是什么。代表。

L.E.: 我有以下内容(cons (cons 'a 'b) 'c)但它产生((A . B) . C)并不是((A.B).C)(注意多余的空格)


空格用于分隔列表标记。A.B是一个单一的令牌。(A.B)是一个包含单个元素的列表。(A . B)是一个缺点细胞A作为汽车和B as cdr.

一个 cons 单元是一对“东西”(对象)。就你而言,这些东西是符号,它们被命名为A, B等。这种单元格的打印表示是(A . B), 例如。这称为“点表示法”。第一个元素称为“car”,第二个元素称为“cdr”。

功能cons创建这样一个单元格。(cons 'a 'b)从而产生细胞(A . B). 请注意,名称始终在内部大写.

这很可能就是你的老师想要的,所以((A . B) . C)是正确的输出,并且您的代码是正确的答案。这是一个汽车指向另一个单元格的单元格,并且 cdr 包含C。另一个单元格是汽车包含的单元格A和 cdrB.

顺便说一下,一个list是此类 cons 单元的线性链,这样 car 始终保存一个值,并且 cdr 指向列表的其余部分。最后一个 cdr 没有指向任何地方(在 Lisp 中称为 NIL)。在点表示法中,列表例如是(A . (B . (C . NIL)))。由于列表很重要,因此可以将它们写得更短,如下所示:(A B C)。如果最后一个 CDR 具有值而不是 NIL,则它以点表示法显示,例如(A . (B . (C . D))))可以写成(A B C . D).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(cons 'a (cons 'b 'c)) 和 (cons 'a '(b.c)) 之间的 Lisp 区别 的相关文章

  • Common Lisp 中的属性列表是否引用某些全局状态?

    下面的代码有z作为局部变量 但它的行为就像全局变量一样 defun foo m let z stuff nil push m getf z stuff print z foo 1 foo 2 foo 3 我希望输出是 STUFF 1 STU
  • 如何在类Unix操作系统下方便的运行SBCL代码?

    David James 写了问题和答案 我将对其进行编辑以符合 Stackoverflow 标准 使用 SBCL 您可以将 Lisp 代码编译为机器代码 像 Java net C 甚至 C 一样 您将需要运行时 所以有两种方法来编译 Com
  • R 的 C API 中的 SEXP 数据类型到底是什么以及为什么使用它? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我知道关于 SEXP 的维基百科页面 并且我知道它代表符号表达 我 模糊地 知道 SEXP 是指 Lisp 中的树数据结构的符号 但我
  • 以下函数式编程模式的正确术语是什么?

    我听说它被称为stream http mitpress mit edu sicp full text sicp book node72 html as an 无限列表 http en wikibooks org wiki Clojure P
  • 如何克服 emacs lisp 闭包缺少局部变量的问题

    我现在正在学习 Emacs Lisp参考手册 http www gnu org software emacs manual elisp html和 Common Lisp 来自LISP https rads stackoverflow co
  • CLISP - 反转简单列表

    我必须反转简单 单维 列表的元素 我知道有一个内置的反向函数 但我不能用它来做这个 这是我的尝试 defun LISTREVERSE LISTR cond lt length LISTR 2 LISTR listr is 1 atom or
  • 对于案例,这些表达案例的方法中哪种最好?

    这些都有效 defun testcaseexpr thecase case thecase foo format t matched foo bar format t matched bar funk format t matched fu
  • 在 Java Runtime.getRuntime().exec(...) 中使用引号和双引号

    我正在尝试在 Mac OSX 中从 Java 启动 Lisp 映像 使用控制台中的图像 我输入以下内容 lisp image eval package method some argument 一切都运行良好 在Java中 我在使用传递引号
  • Lisp / Clojure:编写函数生成宏是个好主意吗?

    这个问题 https stackoverflow com q 7852351 346587要求创建一个 Clojure 宏来生成多个函数 我们找到了一种方法来做到这一点 但仍被 这是一个好主意吗 的问题所困扰 我的第一反应是并不真地 有两个
  • 修改功能;保存到 Lisp 中的新函数

    所以我认为 lisp 在其他语言中 的优点之一是它能够实现函数工厂 接受函数作为参数 返回新函数 我想使用此功能对函数进行小的更改并将其保存为新函数 这样如果对原始函数进行更改 它们也会反映在它所基于的新函数中 注意 我不是编写原始函数的人
  • Lisp 中的 (定义 (平均 ....))

    我只是在玩scheme lisp 并正在考虑如何纠正我自己的定义average 我不确定如何做一些我认为需要的事情 定义一个接受任意数量参数的过程 计算这些参数 将参数列表传递给 以将它们加在一起 有人有定义的例子吗average 我似乎对
  • (cons 'a (cons 'b 'c)) 和 (cons 'a '(b.c)) 之间的 Lisp 区别

    有什么区别 cons a cons b c A B C and cons a b c A B C 我需要使用 cons 创建以下列表 a b c 所以我试图理解 是什么 代表 L E 我有以下内容 cons cons a b c 但它产生
  • 解决斐波那契数列的 Lisp 方法

    我想尝试学习 Lisp 但很快就放弃了 我想我会再试一次 我正在看 求 400 万以下所有偶数斐波那契数的总和 我写了下面的代码 它可以工作 但是很丑陋 其中最主要的是它太慢了 因为它一直在进行简单的递归 当我用 Python 编写这个程序
  • 从when语句内的函数返回

    我想做的就是使用 when 语句返回一个值 我想要以下功能 if x return y 我正在尝试使用 when x y 但是when语句并没有以退出函数并返回y的方式进行计算 它只是愉快地继续下一行 有没有办法做到这一点而不需要制作一个看
  • 什么是 S 表达式

    所有 Lisp 开发人员似乎都知道什么是 S 表达式 但有人能为非 Lisp 开发者解释一下这一点吗 已经有一个维基百科条目 https en wikipedia org wiki S expression https en wikiped
  • 试图理解 setf + aref “魔法”

    我现在已经了解了数组和aref在 Lisp 中 到目前为止 它很容易掌握 而且它的作用就像一个魅力 defparameter foo make array 5 aref foo 0 gt nil setf aref foo 0 23 are
  • 如何说服 Lisp SBCL 进行内联 Fixnum 算术?

    我在其他 SO 答案中找到了一些技术 但显然我无法说服 SBCL 进行内联修复数算术 declaim optimize speed 2 safety 1 declaim ftype function fixnum fixnum double
  • 函数式语言与语言实现的角度有何不同

    出现了全新的 函数式编程 范式 与过程式编程相比 它需要彻底改变思维模式 它使用高阶函数 纯度 单子等 我们通常在命令式和面向对象语言中不会看到这些 我的问题是如何执行这些语言与命令式或面向对象语言的不同之处在于 例如内存管理或指针等内部结
  • LISP 非常简单的列表问题

    我正在学习 lisp 而且我对此还很陌生 所以我想知道 如果我这样做 defparameter list 1 list 1 2 defparameter list 2 list 2 3 defparameter list 3 append
  • 一次性的 lisp 宏,我的实现正确吗?

    我正在尝试从 Peter Seibel 的书 Practical Common Lisp 中学习 Lisp 在第 8 章 宏 定义你自己的 http www gigamonkeys com book macros defining your

随机推荐