2013-11-02 48 views
0

我開始瞭解lambda。有沒有可以用foldrfoldllambda的方法嗎?有人能給我一個快速的例子嗎?感謝如何在計劃中使用foldr和lambda?

+1

[This answer](http://stackoverflow.com/a/19547771/1281433)描述_how_摺疊工作,並鏈接到一些其他答案,以及一些細節。 –

回答

4

要添加的3和4的平方,例如:

(foldl 
    (lambda (val res) (+ (sqr val) res)) 
    0 
    '(3 4)) 

的初始值是0。對於列表中的每個值「(3 4),該函數被稱爲具有結合的值到val,並將以前的結果綁定到res

這相當於

(define (fun val res) 
    (+ (sqr val) res)) 

(foldl fun 0 '(3 4)) 

不同之處在於在第一實施例的功能是匿名的。

0

基本上可以結合使用拉姆達與許多事情,包括與foldl和foldr相似,過濾器,地圖等(取決於你想要達到的,當然是什麼)。在這個例子中我們將使用foldr。

假設我們要計算這個列表中所有數字的總和:

(define list1 '(1 2 3)) 

的語法,用foldr和lambda會:

(foldr (lambda (x y) (+ x y)) 0 list1) 

,其中:

  • (拉姆達(XY)(+ XY))是我們的函數 (TW需要O參數x和y,並將它們添加)
  • 爲基礎(這意味着我們從零做起,然後再添加x和y)
  • 列表1是我們正在
工作列表的名稱

基本上我們所做的是(+ 1(+ 2(+ 3 0)))數學

最後但並非最不重要的,這其中包括拉姆達整個foldr相似功能可縮短至

(foldr + 0 list1) 

,它會幾乎做同樣的事情。

下面是另一個例子,試着找出自己是什麼它來測試你的概念的理解。

(foldr (lambda (x y) (append (list (add1 x)) y)) '() list1)