【问题标题】:Haskell nested lists [closed]Haskell 嵌套列表 [关闭]
【发布时间】:2020-03-21 17:21:30
【问题描述】:

我是haskell 编程的新手,我正在尝试检查嵌套列表中对角相邻的元素是否彼此不为负。 我的功能是:

checkNegation :: [[Int]] -> Bool

示例:checkNegation[[1,2], [3, -1]] 将返回 False checkNegation [[1,2],[-1,3]] 将返回 True

【问题讨论】:

  • 你尝试了什么?什么不起作用?
  • "I have my function as" - 这不是一个实际的函数,这是你的函数的类型,是函数的声明。你有什么问题?

标签: haskell nested-lists


【解决方案1】:

我建议将问题分解为多个步骤。

第1步:编写一个函数来获取对角线元素:

diag :: [[a]] -> [a]

您可能会发现this question 很有帮助。

第 2 步:您想检查结果列表中的相邻元素是否互为负数:

allAdjNeg :: [Int] -> Bool

allAdjNeg [-1,1,-1,1] = True.

这也可能最容易分步完成。在步骤 2(a) 中,检查每对相邻元素。您也许可以将this question 的答案改写为一个函数:

adjNeg :: [Int] -> [Bool]

提示:如果你定义一个函数isNeg x y = x == -y,这是一个二元运算符,就像(-)一样,可以与zipWith以同样的方式使用。

在步骤 2(b) 中,您想查看 adjNeg 返回的列表 adjNeg 是否为全真。 and :: [Bool] -> Bool 函数在这里会很有帮助。这应该允许您定义allAdjNeg

然后,您的最终功能将类似于:

checkNegation :: [[Int]] -> Bool
checkNegation lsts = not (allAdjNeg (diag lsts))

【讨论】:

  • 我不想要只有对角线元素。它应该包括所有对角相邻的元素。与矩形列表一样,索引 0,1 将 b 与 1,2 和 1,0 相邻
  • 仅供参考,我已经发布了followup question,其中包括 OP 的说明。发布新帖子是因为它在某种程度上使这个答案无效。
  • @AditiJain:您能否做出公平的尝试并编辑您的问题,具体问题是为什么该尝试不起作用?
  • @AditiJain 如果您确实提出了一些代码并且对此有疑问,请发布一个新问题,包括指向此问题的背景链接;请不要进行会使现有答案无效的编辑。
猜你喜欢
  • 2012-02-25
  • 2019-08-20
  • 2019-02-27
  • 2022-01-20
  • 2014-10-09
  • 2019-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多