使用foldr 将位转换为int 向前

Pau*_*cer 3 haskell

位数组从右到左,例如 [0,1,0,1] = 10 可以通过以下方式读取:

binToInt = foldr (\x xs -> x + 2 * xs) 0  
Run Code Online (Sandbox Code Playgroud)

我想从左到右阅读,例如 [1,0,1,0] = 10

我认为这会起作用:

binToInt' = foldr (\x xs -> (x * ((^) 2 (length xs)) + xs) 0
Run Code Online (Sandbox Code Playgroud)

但是我收到错误:

Couldn't match type `t0 a0' with `Int' 
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

(作为解决方法,我正在反转 binToInt 的结果)

Pau*_*cer 5

我解决了我的问题:

binToInt' = foldl (\acc x -> x + 2 * acc) 0
Run Code Online (Sandbox Code Playgroud)

展开为:

f = (\acc x -> x + 2 * acc)
foldl f 0
  [1,0,1,0]
  (f [1,0,1]) * 2 + 0
  ((f [1,0]) * 2 + 1) * 2 + 0
  (((f [1]) * 2 + 0) * 2 + 1) * 2 + 0
  ((((f []) * 2 + 1) * 2 + 0) * 2 + 1) * 2 + 0
  ((((0) * 2 + 1) * 2 + 0) * 2 + 1) * 2 + 0
Run Code Online (Sandbox Code Playgroud)