我编写了一个按预期工作的函数,但我不明白为什么输出就是这样.
datatype prop = Atom of string | Not of prop | And of prop*prop | Or of prop*prop;
(* XOR = (A And Not B) OR (Not A Or B) *)
local
fun do_xor (alpha,beta) = Or( And( alpha, Not(beta) ), Or(Not(alpha), beta))
in
fun xor (alpha,beta) = do_xor(alpha,beta);
end;
Run Code Online (Sandbox Code Playgroud)
val result = xor(Atom "a",Atom "b");
Run Code Online (Sandbox Code Playgroud)
val result = Or (And (Atom #,Not #),Or (Not #,Atom #)) : prop
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个派生函数来区分使用数据类型,如下所示:
datatype Symex = RCOEFF of real
| COEFF of string
| VAR of string
| POWER of Symex * int
| NEG of Symex
| PLUS of Symex * Symex
| MINUS of Symex * Symex
| MULT of Symex * Symex
| DIVIDE of Symex * Symex
Run Code Online (Sandbox Code Playgroud)
这是*x ^ 3 + 4.0*x ^ 2 + b*x + c的示例
PLUS (MULT (COEFF ("a"),
POWER (VAR ("x"), 3)),
PLUS (MULT (RCOEFF (4.0),
POWER (VAR ("x"), 2)),
PLUS (MULT (COEFF ("b"), …Run Code Online (Sandbox Code Playgroud)