在方案中,爲什麼是這樣的:爲什麼lambda而不是函數定義速記在方案中被認爲是很好的風格?
(define foo
(lambda (x)
42))
認爲是更好的風格莫過於:
(define (foo x)
42)
而且沒有任何理由贊成一個比其他?
在方案中,爲什麼是這樣的:爲什麼lambda而不是函數定義速記在方案中被認爲是很好的風格?
(define foo
(lambda (x)
42))
認爲是更好的風格莫過於:
(define (foo x)
42)
而且沒有任何理由贊成一個比其他?
我不認爲這被認爲是更好的風格,第一個是多餘的。真正的問題是您是定義命名函數foo
還是僅使用lambda
。如果你已經決定做一個命名函數foo
那麼我不明白你爲什麼會把lambda
放在裏面。 lambda
讓您不必單獨命名和定義您製作的每個小函數,因此這真的是決定的地方:這個函數是否足夠重要,可以單獨定義和命名。
你展示什麼是相當於這個在Javascript:
var foo = function(x) {42;}
VS
function foo(x) {
42;
}
後者是前者的語法糖。第一種風格是通用形式,後者是定義函數的捷徑。
至於風格,我不知道爲什麼前者是首選。它更長,需要更多的嵌套。
如果風格是偏好的另一個詞,那麼我同意前者是一個更好的風格。它直截了當地說,「foo是x的函數」。很難在那裏出錯。第二個例子中的「defun」風格的論點是,您將其定義爲您稱之爲的方式。
在C語言中聲明一個指針變量的時候,它就是lisp的等價物。沒有意義:選擇你喜歡的或者你正在使用的組已經決定的東西。沒有人會誤解你。
這是因爲
(define (foo x)
42)
添加一種特殊形式的語言。
1.
(define foo 45)
是一個特殊形式
2.
(lambda (x) (+ x 1)
是一種其他特殊形式如此:
(define foo (lambda (x) (+ x 1)))
添加沒有其他特殊形式大於上面的2。
因此,添加定義函數的簡寫是一個語法糖。由於計劃傾向於極簡主義,因此語言無需添加比必要的更多特殊形式。現在我認爲:
(define foo (x) (+ x 1))
是可讀的,它不會花費重新記憶和理解,所以我不介意在方案中有它。
根據什麼樣式指導? – 2010-08-05 20:44:40
你從哪裏閱讀過那種風格1?我從來沒有見過這樣的事情。 Lambda用於匿名函數,延續傳遞,映射和返回閉包。它對很多事情都很有用,但我更喜歡使用'(define(fun x y)...)'的緊湊性。 – 2010-08-09 12:50:13
個人喜好。 – grettke 2010-08-20 17:04:14