我试图将逻辑运算 exclusive或定义为双变量函数。我不能使用常量,键入注释或if-then-else。我相信我应该通过使用逻辑运算符来做到这一点,但是我错过了我应该如何编写一个函数来使用它们!到目前为止我已经
了fun xor(a,b) = a orelse b andalso not(a andalso b).
我应该如何从这一点返回真值?
答案 0 :(得分:4)
首先,所以你不需要记住andalso
和orelse
的相对优先级和相关性我会使用更多的parens:
fun xor(a,b) = (a orelse b) andalso not(a andalso b);
- map xor [(true, true), (true, false), (false, true), (false, false)];
val it = [false,true,true,false] : bool list
您的错误是您的表达关联如下
a orelse (b andalso not(a andalso b));
sml中没有'返回'的概念。只有表达式被评估为值,而这些表达式又用于其他表达式。
(a orelse b) andalso not(a andalso b)
评估为bool
类型的值。您可以将该结果用于进一步的计算:
if xor(foo, bor) then 1 else 2