代码优化
我必须写一个函数“to_string”,它接收这个数据类型
datatype prop = Atom of string | Not of prop | And of prop*prop | Or of prop*prop;
并返回一个字符串。
例
节目
而(Atom(“星期六”),Atom(“夜晚”))=
“(星期六和晚上)”
我的功能正常,但我有两个问题。
口译员告诉我 - >Warning: match nonexhaustive
我想我可以用所有类型的Locals函数编写函数(Not,And,Or)并避免重复代码,但我不知道如何。
有我的代码
datatype prop = Atom of string | Not of prop | And of prop*prop | Or of prop*prop;
fun show(Atom(alpha)) = alpha
| show(Not(Atom(alpha))) = "(- "^alpha^" )"
| show(Or(Atom(alpha),Atom(beta))) = "( "^alpha^" | "^beta^" )"
| show(Not(Or(Atom(alpha),Atom(beta)))) = "(- ( "^alpha^" | "^beta^" ))"
| show(Or(Not(Atom(alpha)),Atom(beta))) = "( (-"^alpha^") | "^beta^" )"
| show(Or(Atom(alpha),Not(Atom(beta)))) = "( "^alpha^" | (-"^beta^") )"
| show(Or(Not(Atom(alpha)),Not(Atom(beta)))) = "( (-"^alpha^") | (-"^beta^") )"
| show(And(Atom(alpha),Atom(beta))) = "( "^alpha^" & "^beta^" )"
| show(Not(And(Atom(alpha),Atom(beta)))) = "(- ( "^alpha^" & "^beta^" ))"
| show(And(Not(Atom(alpha)),Atom(beta))) = "( (-"^alpha^") & "^beta^" )"
| show(And(Atom(alpha),Not(Atom(beta)))) = "( "^alpha^" & (-"^beta^") )"
| show(And(Not(Atom(alpha)),Not(Atom(beta)))) = "( (-"^alpha^") & (-"^beta^") )";
非常感谢你的帮助。
没有找到相关结果
已邀请:
1 个回复
贸会
我相信你可以弄明白其余的(你将有两个递归调用和/或)。