2013-03-27 46 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