【发布时间】:2014-10-06 13:56:07
【问题描述】:
我有一个练习要做,但是由于我是这门语言的新手,所以我找不到任何方法来做。
我有这个定义为“重复”的功能,在本段中给出。它接收一个 Int 列表并返回一个 Bool 值。它应该检查列表是否有任何重复的元素。如果是,则为真,否则为假。还有一个额外的:我必须通过递归来定义函数,所以它必须是递归函数。将不胜感激。
repeated :: [Int] -> Bool
EDIT1:到目前为止,我只成功使用了这么多代码
repeated :: [Int] -> Bool
repeated [] = False
repeated (h:t) =
这只会让我返回空列表。其余的,我到现在都想不通……
EDIT2:忘记了单数列表...另外,可能的答案?
repeated :: [Int] -> Bool
repeated [] = False
repeated [_] = False
repeated (h:t) = if elem h t then True
else repeated t
差不多就是这样。我已经编译了 .hs 并且效果很好。谢谢大家的建议和提示! :)
【问题讨论】:
-
这是排序的还是你可以先排序的?
-
使用
nub可能更容易:repeated xs = xs == nub xs? -
elem功能可能会有所帮助。 -
这取决于它是“重复”元素还是“重复”元素。我会将“重复”理解为“彼此相邻且相同的元素”,将“重复”理解为“列表中任何相同的元素”。重复与已排序的
Ord a的任意列表相同。 -
作为旁注,我想指出这是一个极好的 SO 问题。你有一个特定的问题要解决,你迅速参与了讨论,将你的问题编辑为更合适和更清晰,并在你开始从提示中解决问题时添加代码。
标签: haskell