SML和函数式编程的新手。初学者问题

时间:2013-09-06 19:53:13

标签: functional-programming sml

我试图将逻辑运算 exclusive或定义为双变量函数。我不能使用常量,键入注释或if-then-else。我相信我应该通过使用逻辑运算符来做到这一点,但是我错过了我应该如何编写一个函数来使用它们!到目前为止我已经

fun xor(a,b) = a orelse b andalso not(a andalso b).

我应该如何从这一点返回真值?

1 个答案:

答案 0 :(得分:4)

首先,所以你不需要记住andalsoorelse的相对优先级和相关性我会使用更多的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