声明功能

时间:2014-09-11 01:23:14

标签: list function haskell

我对haskell编程很新,很多时候都有很多困难。我在这里给出的任务是a有一个数字列表然后与另一个数字列表进行比较,并返回三个数字作为反馈,基于对其他数字的解释可以被过滤。 例如

[4,9],[7,9],[10,18],[2,9]是我的清单 现在它应该是两个单独的列表[4,9]和[7,9]它应该给出反馈(1,1,0)

第一个函数应该检查两个列表是否具有相同的值,如果它们应该返回值2,如果只有一个值那么它应该返回1,没有值然后返回0 我尝试使用elem方法执行此操作,但我无法成功。所以答案必须是1,因为它在两个列表上都有9个。

第二个函数检查最低值。它应该只从第二个元素到第一个元素进行比较。从上面[4,9]和[7,9]的相同例子中,它首先找出[7,9]中的最低值7,然后在[4,9]中检查低于7的任何值,它在那里然后它返回反馈1,否则为0

第三个函数与第二个函数相同,只是它检查最高值 例如[[3,13],[10,9],[5,7]]我们采用列表的前两个元素 [3,13]和[10,9],现在我们检查[10,9]中的最高数字是10并检查[3,13]中的那个值,这里答案必须是1,因为13高于10否则它是0

请帮助宣布这些功能 会非常有责任

1 个答案:

答案 0 :(得分:1)

如果没有看到任何示例代码,您的问题会有点混乱。我想我理解你的第一个功能需要如何工作:

您似乎正在使用列表列表[[Int]],但您的所有列表只有两个项目。使用一对[(Int,Int)]

会更容易

然后你的第一个函数可以用嵌套的if语句编写:

firstTest (a1,b2) (a2,b2) = if a1 == a2 && b1 == b2 then 2 else if a1 == a2 || b1 == b2 then 1 else 0

如果它不能成对,并且它必须是列表列表,那么可能更容易验证您的问题,并使用Data.Set将这两个列表转换为集合。比较两个集合比比较两个列表更有效 - 而Data.Set为我们提供了有用的isSubsetOf函数。您可以使用fromList函数将列表转换为集合。

import qualified Data.Set as S
firstTest' :: S.Set Int -> S.Set Int -> Int
firstTest' sas sbs = if sas == sbs then 2 else if S.isSubsetOf sas sbs then 1 else 0

比较列表中的相邻项目有点挑战性。看看我对这个问题的回答:https://stackoverflow.com/a/25777940/3792504