2013-03-27 44 views
3

我想在Emacs Lisp中创建一对点变量。但我能找到的唯一办法似乎很难实施。作为一个简单的例子:Emacs虚线对语法改进

(let ((width (calculate-width) 
     (height (calculate-height)) 
    `(,width . ,height)) 

这反引号,双所享有的语法气味给我,但我无法找到一个更合适的方法和我的谷歌福失败了我。

当值是变量时,是否有更好的方法来构造一个虚线对?

(为了清楚起见,它必须是一个点对直名单不会做。)

回答

8

你可以使用cons

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

我知道我在做硬盘的方式,但是我不知道这个缺点是否会接受一个非列表作为第二个参数。这很完美,谢谢! – 2013-03-27 14:44:47

+3

@KrisJenkins Cons cell可以在第一个和第二个组件中都存储任何东西。列表仅仅是cons单元的特例,即cons单元,其第二个元素是另一个cons单元,第二个元素又是另一个cons单元,依此类推。 “(foo bar baz)”与“'(foo。(bar。(baz。nil)))''非常相似。这种洞察力对于理解“cons”,“car”,“cdr”和所有其他Lisp列表函数的含义至关重要。 – lunaryorn 2013-03-28 11:29:11

+1

谢谢。 Clojure是我的第一个Lisp,所以我从它的缺点实现中获得了一些期望,其中第二个参数必须是一个序列。 – 2013-03-28 16:42:24