【发布时间】:2016-03-15 11:41:33
【问题描述】:
我正在尝试在 Haskell 中编写一个函数,该函数将 4 个整数作为输入并计算输入数字中有多少等于第一个整数。
例如:
howManyEq 3 4 5 6 returns 0
howManyEq 3 4 3 5 returns 2
howManyEq 3 4 3 3 returns 3
howManyEq 3 3 3 3 returns 4
这是我到目前为止创建的函数,它适用于没有与第一个整数匹配的输入的第一个实例。但是当有其他匹配的整数时,它不计算前3个,它总是少一个。
howManyEq :: Int -> Int-> Int -> Int -> Int
howManyEq a b c d = count (head (toList a b c d)) (tail (toList a b c d))
count :: Int -> [Int] -> Int
count x [] = 0
count x (y:ys)
| x == y = 1 + (count x ys)
| otherwise = count x ys
toList :: Int -> Int-> Int -> Int -> [Int]
toList a b c d = [a,b,c,d]
我的功能给了我:
howManyEq 3 4 5 6 returns 0
howManyEq 3 4 3 5 returns 1
howManyEq 3 4 3 3 returns 2
howManyEq 3 3 3 3 returns 3
当其他输入整数相等时,我不确定如何计算第一个整数。
【问题讨论】:
-
根据您的逻辑,
howManyEq永远无法返回 1. 创建将+ 1返回到您现在返回的函数。将该结果输入定义为f 1 = 0和f a = a的函数中... -
你的例子是不是不正确?不应该第一次返回
1。如果是这种情况,这是一个典型的错误。 -
howManyEq 3 4 3 5应该返回 2,因为它计算 3 的两个实例。但是howManyEq 3 4 5 6应该返回 0。我知道这有点不合逻辑,但这是我老师出于某种原因想要的方式。
标签: list function haskell input integer