gpt4 book ai didi

haskell - 使用 foldr 将 bit 转换为 int forward

转载 作者:行者123 更新时间:2023-12-05 02:18:34 25 4
gpt4 key购买 nike

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

binToInt = foldr (\x xs -> x + 2 * xs) 0  

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

我认为这会起作用:

binToInt' = foldr (\x xs -> (x * ((^) 2 (length xs)) + xs) 0

但是我得到了错误:

Couldn't match type `t0 a0' with `Int' 

我做错了什么?

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

最佳答案

我解决了我的问题:

binToInt' = foldl (\acc x -> x + 2 * acc) 0

展开为:

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

关于haskell - 使用 foldr 将 bit 转换为 int forward,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45018107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com