在SICP 1.3.2,還有這個功能爲什麼Scala中的匿名函數和函數是這樣構造的?
(define (f x y)
((lambda (a b)
(+ (* x (square a))
(* y b)
(* a b)))
(+ 1 (* x y))
(- 1 y)))
現在30分鐘錯誤後追逐後,我發現this page,它提供了這個功能
def f_lambda(x: Int, y: Int) =
(((a: Int, b: Int) => ((x * square(a)) + (y * b) + (a * b)))
(1 + (x * y), 1 - y))
我不明白爲什麼它被包圍(如堡壘)與括號。
編輯:對不起,我真正的問題是我不明白爲什麼這個函數的構造方式。換句話說,爲什麼首先需要所有括號。與我目前看到的Scala代碼相比,這看起來完全是「外來的」。
請參閱上面的編輯 – dotnetN00b
關於爲什麼上面顯示的代碼是以這種方式編寫的,它在我看來就像是Clojure的一個大部分直接翻譯或一些其他類似lisp的語言,由更熟悉前者比後者。它從使用該語言的移民看到Java(有時令人震驚)的Scala代碼做出了有趣的改變!我希望在有經驗的情況下,以及專家對Scala的接觸以及諸如此處發現的答案,這些Scala移民將學習如我在這裏嘗試的那樣產生更清晰更自然的翻譯。 – Shadowlands
所以我顯然不清楚。我想我想問的是:這是什麼構造?通常情況下,表達式或表達式用括號括起來。但是我所看到的只是一個匿名函數,它的身體用圓括號包裹,然後緊接着在括號中包含f_lambda2的身體。所以我只是不瞭解這個建築,以及它是如何融合在一起的。 – dotnetN00b