为什么这个真/假蕴涵功能在SML中不起作用?

Chu*_*cky 1 functional-programming sml high-level

val implies =
    fn x y = case x of false andalso case y of false => true
     | fn x y = case x of false andalso case y of true => true
     | fn x y = case x of true andalso case y of false => false
     | fn x y = case x of true andalso case y of true => true;  
Run Code Online (Sandbox Code Playgroud)

我无法编译.我对SML比较陌生,所以不太习惯一般的语言和语法.我做错了什么?

pad*_*pad 7

有各种各样的错误:

  • implies直接进行模式匹配没有任何参数.
  • case x of用于与特定值进行模式匹配,而不是像if/else接受布尔表达式的表达式.
  • lambda的语法应该从fn x => ....

快速修复:

fun implies x y =
    case (x, y) of
      (false, false) => true
    | (false, true) => true
    | (true, false) => false
    | (true, true) => true
Run Code Online (Sandbox Code Playgroud)

可以重写为可读性:

fun implies false false = true
  | implies false true = true
  | implies true false = false
  | implies true true = true
Run Code Online (Sandbox Code Playgroud)

或者通过使用命题逻辑规则更简洁:

fun implies x y = (not x) orelse y
Run Code Online (Sandbox Code Playgroud)