在Haskell中编写数字函数

时间:2017-04-06 15:09:19

标签: haskell

我目前正在通过The Craft of Functional Programming 2nd Edition工作,我被赋予了一项任务,可以编写一个让我难以理解的功能。

该函数将三个数字作为参数并返回一个布尔结果,即

between :: Int -> Int -> Int -> Bool

如果n在n和p之间,则定义为m n p之间为真。为简单起见,在2 2 2之间,函数将返回true,3 3 5之间也将返回true。

数学上,x <= y且y <= z

这个问题还建议我可以编写一个weakAscendingOrder函数来检查数字序列在任何时候都不会出现故障。我写了这个函数,我的代码如下所示:

weakAscendingOrder :: Int -> Int -> Int -> Bool
weakAscendingOrder x y z = (x <= y) && (y <= z)

如何在使用或不使用weakAscendingOrder的情况下编写一个between函数,同时保留函数签名,因为它们是由本书提供的?

1 个答案:

答案 0 :(得分:0)

评论二是完全正确的。 weakAscendingOrder函数的行为与您希望between的行为完全相同。以下是一些其他实现方式:

between x y z --using guards
  |x <= y = y <= z
  |otherwise = False

between x y z = if (x <= y) then (y <= z) else False --using if

between x y z = case (x <= y) of True  -> (y <= z) --using case syntax
                                 False -> False

然而(x<=y)&&(y<=z)在我看来非常易读并能很好地完成工作。