【问题标题】:Can I get some idea with this haskell exercise? [closed]我可以对这个haskell练习有所了解吗? [关闭]
【发布时间】:2021-10-01 14:10:27
【问题描述】:

我得到了这个练习,但我不知道如何开始和解决它。

一个轴上的点

  • 确定由坐标表示的点是否位于坐标系中的轴上!
  • 使用模式匹配!不要使用相等测试或分支。
  • 还要指定函数的类型!
  • 以下每个测试用例都必须给出 True:
  • onAxis (0, 0)
  • onAxis (0, 100)
  • onAxis (50, 0)
  • onAxis (-12, 0)
  • not (onAxis (4, 5))

【问题讨论】:

  • 想象一下,您应该用另一种您熟悉的语言(例如 Java/Python/C++)编写它。你将如何实现这样的功能。
  • 或英语/任何其他语言。
  • @WillemVanOnsem 可能带有禁止的相等测试和分支
  • @user253751:我会首先专注于实现一个解决方案,然后看看你可以使用什么,并相应地重写项目。

标签: haskell pattern-matching axis


【解决方案1】:

Haskell 的模式匹配是一个强大而有用的功能。例如,您的函数可以有多个公式,Haskell 将选择其中一个,例如,参数模式匹配:

isZero :: Int -> Bool
isZero 0 = True
isZero _ = False

这个简单的小函数应该告诉我我的参数是否等于零。我这样做没有任何比较,只是通过模式匹配。 0 匹配.. 好吧,字面意思是 0。但是_ 匹配一切。这里的顺序很重要,选择第一个匹配的公式。

那么你的积分呢?它们表示为元组:(x, y)。我们可以通过模式匹配“查看”值:

isZeroPoint :: (Int, Int) -> Bool
isZeroPoint (0, 0) = True
isZeroPoint _      = False

好的,那么我们如何知道(二维)点是在 X 轴还是 Y 轴上?看看给出的例子,现在应该很明显了!

有了这个,你应该可以解决你的练习了! 如果您这样做或仍有疑问,请报告;)

PS:我没有详细说明完整的解决方案,因为我认为如果我为你做作业对你没有帮助。

PPS:为了简单起见,我只是选择了具体类型Int,因为我不知道您已经了解了有关 Haskell 类型的其他内容。可以使用不同的数字类型(例如,Integer)或更通用的东西。

【讨论】:

  • 谢谢它正在使用这个:onAxis :: (Int, Int) -> Bool onAxis (x,0) =True onAxis (0,y) =True onAxis _ =False
  • 很好,如果你不使用变量,你可以使用通配符模式_,所以onAxis (_, 0) = True。也可以定义为onAxis2 (x, y) = any (== 0) [x, y]
猜你喜欢
  • 2022-06-13
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 2018-02-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-22
  • 1970-01-01
相关资源
最近更新 更多