我已经开始学习函数式编程。我经历了John Hughes的演讲,我对此表示怀疑。你能帮我吗?
他说不需要布尔值作为数据类型。它们可以表示为如下函数:
true x y = x
false x y = y
然后他构造if-then-else,它需要三个参数:boolean,then branch和else:
if-then-else bool x y =
bool x y
在实际情况下如何运作?我们来看下面的例子:
if (age > 18) then {
issue_ticket
} else {
dont_issue_ticket
}
表达"年龄> 18",可以包含在以下函数中:
isAgeAboveThreshold age threshold =
???????????????????
我不知道如何在没有" if"的情况下定义函数。如何定义它以返回" true"如果年龄大于阈值?你能帮忙吗?
非常感谢。
答案 0 :(得分:0)
这是在讨论Church encoding。在其中,您可以在定义age > threshold
和isZero (minus (succ threshold) age)
后将minus
(对于自然数字)表示为isZero
。
但对于实际例子,这并不是特别预期。仅仅因为可以用这种方式表示不同的数据类型,并不意味着它们应该是。
我不知道如何在没有“if”的情况下定义函数。
你不应该认为你需要;一旦你知道如何表示if
,你就可以用它来定义更多的函数。