haskell 使用一阶函数将二进制字符串转换为整数值

b4qexyjb  于 2023-01-05  发布在  其他
关注(0)|答案(4)|浏览(131)

给定01的有限列表,如何使用一阶函数将它们转换为整数值?
列表的开头是最低有效数字。例如,1011的计算结果为13
在这个问题中,我很难找到递归步骤和基本步骤,因为这取决于它是0还是1。
编辑:
我们的目标是定义一个函数来计算给定二进制字符串的十进制值。我猜空列表应该返回0,所以它是基本情况。

oipij1gg

oipij1gg1#

总结我的评论:

convert :: [Int] -> Int
convert [] = 0
convert (x : xs) = x + 2 * convert xs

基本情况是空列表,返回0
递归的情况来自x是最低有效位的事实。convert xs(递归调用)给我们列表尾部的结果;为了得到整个列表的结果,我们需要乘以2(以“移位”数字)并加上x(0或1)。

8ljdwjyq

8ljdwjyq2#

以下是我对如何处理这种情况的初步想法。

import Data.Char (digitToInt)

myFunction :: String -> Int
myFunction = foldr step 0
    where step x y = (+) (digitToInt x) ( (*) y 2 )
yzxexxkh

yzxexxkh3#

假设输入是10的列表。

bin2num :: [Int] -> Int
bin2num list = go list 0
  where go []     _ = 0
        go (x:xs) n = (x*(2^n)) + (go xs (n+1))
2g32fytz

2g32fytz4#

只需将acc加倍并将其添加到列表的新元素中。很容易使用digitToInt从string _ st中获取正确的列表。为了提高效率,还可以使用foldl'。这就是Sanaz的答案
从Bin开始st =折叠'(\x加速-〉x * 2 +加速)0(Map(数字到整数)st)

相关问题