[問題] Lambda的higer order function

看板C_and_CPP作者 (..)時間13年前 (2012/07/12 01:54), 編輯推噓5(5011)
留言16則, 9人參與, 最新討論串1/2 (看更多)
最近在看Lambda 有一部份看了很久還是不懂,不知道是他寫太簡捷還是我哪個點沒有抓到 http://msdn.microsoft.com/en-us/library/dd293599.aspx 文件在上面 在higher order function的部份 auto g = [](int x) -> function<int (int)> { return [=](int y) { return x + y; }; }; 首先就是上面這邊,不懂為什麼要將int x轉成 function type 這樣做的用意到底在哪? 接著 auto h = [](const function<int (int)>& f, int z) { return f(z) + 1; }; 之後 h(g(7),8) output 會是16 麻煩大大幫解惑一下 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.95.34

07/12 02:43, , 1F
推文空間太小了實在很難說明這個的妙用
07/12 02:43, 1F

07/12 02:43, , 2F
還是交給專業的Favonia來說明吧 (誤
07/12 02:43, 2F

07/12 02:49, , 3F
g 是想達成 bind1st() 的效果, 你想打的應該是 ',' 吧
07/12 02:49, 3F
提醒感謝,我的問題主要是在 g 的地方,就是將ouput type 轉成 function< >後 他要如何去接住 int x的值呢? 我剛有試了一下 假設將程式改成 function< int (int , int) > 那前面的 int x 要如何修改才能正確接住值呢? 就是 h(g(7,8),9) or h(g(7),8,9) 這樣?? 這部分我真的不太了解 謝謝

07/12 02:52, , 4F
第二個應該不難理解, compose而已
07/12 02:52, 4F

07/12 07:13, , 5F
g 是接受兩個整數的函式,只是可以分次 apply
07/12 07:13, 5F

07/12 07:16, , 6F
好像叫作 curried function
07/12 07:16, 6F

07/12 08:11, , 7F
lambda真的很玄妙,研究不太出奧妙。
07/12 08:11, 7F

07/12 08:23, , 8F
其實不是很懂問題在哪- -|||
07/12 08:23, 8F

07/12 09:10, , 9F
g 是一個會傳回函式的函式,h 是會接收一個函式與int的函式
07/12 09:10, 9F

07/12 09:12, , 10F
loveme00835 指的 ',' 是 h(g(7), 8)
07/12 09:12, 10F
※ 編輯: gogoqaz 來自: 118.163.84.235 (07/12 12:43)

07/12 13:53, , 11F
看不懂你的問題
07/12 13:53, 11F

07/12 13:55, , 12F
感覺是 c++的語法複雜化了 ...
07/12 13:55, 12F

07/12 14:29, , 13F
看不懂你在問什麼....
07/12 14:29, 13F

07/12 14:31, , 14F
你去改g的return type跟前面g的參數(int x)有什麼關係..
07/12 14:31, 14F

07/12 18:47, , 15F
... 其實在 C++ 的世界裡面可能說 closure 比較精準...
07/12 18:47, 15F

07/12 19:01, , 16F
不過這裡不太重要 xD
07/12 19:01, 16F
文章代碼(AID): #1F_RtHt- (C_and_CPP)
文章代碼(AID): #1F_RtHt- (C_and_CPP)