2013-11-20 25 views
0

我需要轉換斌到十二月這是什麼功能呢,哈斯克爾

我發現在互聯網下面的代碼的算法,但我只是不知道,什麼一些變量的含義:

bin2dec :: [Int] -> Int 
bin2dec n = foldl (\a x->2*a+x) 0 n 

我已經知道與foldl 但什麼手段(\一個X-> 2 * A + X)0 N 我不知道是什麼\斧 - > 2種* A + X手段,也爲 「0 N」

莫非任何人都請解釋我這個功能的工作原理?

由於

回答

0

與foldl ::(甲 - >乙 - >一) - >一 - >並[b] - >一個 所以基本上一個是第一0,然後是整個摺疊攜帶的值。 n是你傳入bin2dec的列表,0是你開始摺疊的對象。

\ a x - > 2 * a + x是lamda函數。它需要兩個變量,a和x並返回箭頭右側給出的值。

+0

哦,謝謝。 我不知道拉姆達這麼多,我可以編寫代碼以不同的方式,像這樣: 彬:: [INT] - >詮釋 斌[] = 0 斌(X:XS)=與foldl( 2 * xs + x) 它不是做同樣的事情嗎?但我得到一個錯誤... – Blnpwr

+0

你得到一個錯誤,因爲你需要給foldl一個起始值,也是一個函數。查找foldl的定義。 Foldl的basecase已經與[]匹配,因此添加的[]模式匹配應該有所作爲。第二行沒有任何意義,但不應編譯。你不要給它一個函數,基礎或列表。 – xZel

+0

怎麼樣:bin :: [Int] - > Int bin(x:xs)=(foldl(*)2(xs + x)) 仍然出現錯誤.. – Blnpwr