给定0和1的有限列表,如何使用一阶函数将它们转换为整数值?列表的开头是最低有效数字。例如,1011的计算结果为13。在这个问题中,我很难找到递归步骤和基本步骤,因为这取决于它是0还是1。编辑:我们的目标是定义一个函数来计算给定二进制字符串的十进制值。我猜空列表应该返回0,所以它是基本情况。
0
1
1011
13
oipij1gg1#
总结我的评论:
convert :: [Int] -> Int convert [] = 0 convert (x : xs) = x + 2 * convert xs
基本情况是空列表,返回0。递归的情况来自x是最低有效位的事实。convert xs(递归调用)给我们列表尾部的结果;为了得到整个列表的结果,我们需要乘以2(以“移位”数字)并加上x(0或1)。
x
convert xs
8ljdwjyq2#
以下是我对如何处理这种情况的初步想法。
import Data.Char (digitToInt) myFunction :: String -> Int myFunction = foldr step 0 where step x y = (+) (digitToInt x) ( (*) y 2 )
yzxexxkh3#
假设输入是1和0的列表。
bin2num :: [Int] -> Int bin2num list = go list 0 where go [] _ = 0 go (x:xs) n = (x*(2^n)) + (go xs (n+1))
2g32fytz4#
只需将acc加倍并将其添加到列表的新元素中。很容易使用digitToInt从string _ st中获取正确的列表。为了提高效率,还可以使用foldl'。这就是Sanaz的答案从Bin开始st =折叠'(\x加速-〉x * 2 +加速)0(Map(数字到整数)st)
4条答案
按热度按时间oipij1gg1#
总结我的评论:
基本情况是空列表,返回
0
。递归的情况来自
x
是最低有效位的事实。convert xs
(递归调用)给我们列表尾部的结果;为了得到整个列表的结果,我们需要乘以2(以“移位”数字)并加上x
(0或1)。8ljdwjyq2#
以下是我对如何处理这种情况的初步想法。
yzxexxkh3#
假设输入是
1
和0
的列表。2g32fytz4#
只需将acc加倍并将其添加到列表的新元素中。很容易使用digitToInt从string _ st中获取正确的列表。为了提高效率,还可以使用foldl'。这就是Sanaz的答案
从Bin开始st =折叠'(\x加速-〉x * 2 +加速)0(Map(数字到整数)st)