Emacs点对语法的改进

5
我希望在Emacs Lisp中创建一对点对变量。但是我能找到的唯一方法似乎非常笨拙。以下是一个简化的示例:
(let ((width (calculate-width)
      (height (calculate-height))
  `(,width . ,height))

这种反引号和双引号的语法对我来说有些奇怪,但我找不到更好的方法,我的 Google-fu 也失败了。

当值是变量时,是否有更好的构建点对的方法?

(为了澄清,它必须是一个点对。直接的列表行不通。)

1个回答

11

您可以使用 cons

(let ((width (calculate-width))
      (height (calculate-height))
   (cons width height))

1
我知道我一直在用困难的方式做,但我不知道cons会接受非列表作为第二个参数。太好了,谢谢! - Kris Jenkins
4
Cons单元格可以在第一和第二组件中存储任何内容。列表只是Cons单元格的特殊情况,即第二个元素是另一个Cons单元格,其第二个元素又是另一个Cons单元格,以此类推。'(foo bar baz)'与'(foo . (bar . (baz . nil)))'完全相同。这一认识对于理解conscarcdr以及所有其他Lisp列表函数的意义至关重要。 - user355252
1
谢谢。Clojure是我接触的第一种Lisp语言,因此我对它实现的cons函数有一些期望。在该函数中,第二个参数必须是一个序列。 - Kris Jenkins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接