如何写数学| x |在Haskell?

时间:2018-07-26 10:45:37

标签: haskell math module

您如何使(x - y) < 20始终为正?

我想为以下条件做一个条件

getJOL :: [Int] -> String
getJOL [w,x,y,z] = if x - w < 20 && y - x < 20 && z - y < 20
                     then "Good calibration"
                     else "Bad calibration"

两个值之差必须为正。

2 个答案:

答案 0 :(得分:10)

是的,abs是您想要的功能。这是| x |的常规名称在大多数语言中。

顺便说一句,您可能不应该对四个列表元素进行硬编码。这既不安全(如果有人将包含五个元素的列表交给您,该怎么办?)又是重复性的。只需在列表上进行递归,当发现一对距离太大时就会终止:

getJOL (w:x:ys)
  | abs (x - w) >= 20  = "Bad calibration"
getJOL (_:xs) = getJOL xs
getJOL [] = "Good calibration"

答案 1 :(得分:5)

Just use the absolute values abs. This will check, whether the absolute difference is lower than 20.

getJOL :: [Int] -> String
getJOL [w,x,y,z] = if abs(x - w) < 20 && abs(y - x) < 20 && abs(z - y) < 20
                     then "Good calibration"
                     else "Bad calibration"