2013-04-13 32 views
2

爲什麼有些使用#'(lambda,而不是Common Lisp中只是(lambda?有沒有性能優勢還是什麼?爲什麼有些使用#'(拉姆達而不是隻(Common Lisp中lanbda?

因爲,正如彼得Siebel和別人解釋,在CL,「下面的lambda表達式:(lambda() 42)擴展到時在上下文它評估它發生如下:(function (lambda() 42))」。

+0

@RainerJoswig是的,但真的沒有「爲什麼」回答這個問題!我理解事情的運作方式及其歷史意義,但我的問題僅僅是:是否仍然有合法的理由,所以在現代CL中使用'#''lambda'?如果我忘記這個歷史神器,其他CL程序員是否會在我的代碼中看起來很奇怪? – NeuronQ

+1

我對那個問題的回答觸及了那個話題。 Stackoverflow與討論語言功能的用法沒有多大關係。如果您有實際的編程問題,請發佈。 –

+0

@RainerJoswig好的,謝謝。既然你鏈接的問題回答了我的問題中「發生了什麼」部分,而「爲什麼」部分對於SO來說太過哲學,那麼它應該被標記爲該問題的重複。 – NeuronQ

回答

0

有不同之處的編譯時間與幾個millisecods幾毫秒沒有性能優勢的閱讀時間:)

我認爲真正的原因是一致性。如果有人寫(mapcar #'myfunc ...)(不僅僅是(mapcar myfunc ...)),寫(mapcar #'(lambda ...) ...)也是很自然的。

+0

uhm ...它可能看起來「一致」,但從概念上來說,顯然'#'myfunc'給我函數名稱爲「myfunc」的函數對象,而'(lambda ...)'只是給了我一個函數對象。當我閱讀'#'(lambda ...)''我不得不想到「使用由lambda返回的名稱獲取函數的函數對象,我實際上永遠都看不到」,這實際上就是它的語義。這隻會讓你的大腦受傷! – NeuronQ

+0

你不必這麼認爲:) – monoid

+0

......但這是我能想到'#'(lambda ...)'而沒有陷入矛盾的唯一途徑,這就是我的想法如何運作:) otoh,任何人可以認爲普通的'lambda'是返回「函數對象」的東西,而不是必須穿過'#''的名字,否則上帝就知道了什麼。作爲獎勵,它減少2個字符的類型,除了我精神上的gimnastics :) – NeuronQ