Functional programming SML和函数式编程新手。初学者问题
我试图将逻辑运算exclusive or定义为一个两变量函数。我不能使用常量、类型注释或if-then-else。我相信我应该通过使用逻辑运算符来实现这一点,但我不知道我应该如何使用这些运算符写出一个函数!到目前为止我有Functional programming SML和函数式编程新手。初学者问题,functional-programming,sml,Functional Programming,Sml,我试图将逻辑运算exclusive or定义为一个两变量函数。我不能使用常量、类型注释或if-then-else。我相信我应该通过使用逻辑运算符来实现这一点,但我不知道我应该如何使用这些运算符写出一个函数!到目前为止我有 fun xor(a,b) = a orelse b andalso not(a andalso b). 我应该如何从这一点返回一个真值?首先,您不需要记住和的相对优先级和关联性,并且和或我会使用更多参数: fun xor(a,b) = (a orelse b) andalso
fun xor(a,b) = a orelse b andalso not(a andalso b).
我应该如何从这一点返回一个真值?首先,您不需要记住
和的相对优先级和关联性,并且和或我会使用更多参数:
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
此外,这可以实现得更短:funxor(a,b)=ab
。此函数的类型是''a*'>a->bool
-如果您希望它是bool*bool->bool
,则必须添加一个类型约束,这有点笨拙,但有效:有趣的异或(a:bool,b)=a b