http://i.stack.imgur.com/71w9v.png
我必须找到一名球员赢了多少钱。
这必须通过创建一个名为digits Int->Int->Int
的函数来完成。例如,如果第一个输入是13758455
而函数的第二个输入是13758455
,那么我应该在编译器中获得1000000
。
这通常是Java中的一项简单任务,但是当我在数字中找到更多数字时,我无法找到计数器之类的东西。
答案 0 :(得分:1)
由于Haskell中没有状态,你不能拥有像命令式语言那样的计数器。
你经常会使用递归来解决这个问题。这是一个例子:
module Main where
moneyWon :: Int -> Int
moneyWon 8 = 1000000
moneyWon 7 = 100000
moneyWon 6 = 8000
moneyWon 5 = 300
moneyWon 4 = 20
moneyWon 3 = 5
moneyWon 2 = 1
moneyWon _ = 0
digits :: Int -> Int -> Int
digits 0 0 = 0
digits x y = digits dx dy + if mx == my then 1 else 0
where (dx, mx) = divMod x 10
(dy, my) = divMod y 10
main = do
print $ (moneyWon . digits 12345678) 12345668
注意:
divMod x 10
是获得基数10中最低含义数字的方法Int
离开任务来检查号码是否有效。