我编写了一个按预期工作的函数,但我不明白为什么输出就是这样.
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)
zeu*_*xcg 16
这只是一个输出限制(是的,它令人困惑) - 默认情况下,顶级(交互式shell)中的值打印输出的深度限制为相当小的数字(即5).跳过的部分用#打印.
您可以使用printDepth变量覆盖此深度 - 至少在SML-NJ中 -
Control.Print.printDepth := 1024;
Run Code Online (Sandbox Code Playgroud)
PS顺便说一句,这里你不需要单独的do_xor和local函数 - 只是
fun xor(alpha, beta) = Or(...);
Run Code Online (Sandbox Code Playgroud)
会做.
| 归档时间: |
|
| 查看次数: |
1183 次 |
| 最近记录: |