【问题标题】:New to SML and functional programming. Beginner questionsSML 和函数式编程的新手。初学者问题
【发布时间】:2013-09-07 15:52:52
【问题描述】:

我试图将逻辑运算 exclusive or 定义为一个二元函数。我不能使用常量、类型注释或 if-then-else。我相信我应该通过使用逻辑运算符来做到这一点,但是我不知道应该如何只使用这些来编写一个函数!到目前为止我有

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

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

【问题讨论】:

    标签: functional-programming sml


    【解决方案1】:

    首先,您不需要记住andalsoorelse 的相对优先级和关联性,我会使用更多括号:

    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
    

    【讨论】:

    • 此外,这可以更短地实现:fun xor (a, b) = a <> b。这个函数的类型是''a * ''a -> bool——如果你希望它是bool * bool -> bool,你必须添加一个类型约束,这有点笨拙,但是有效:fun xor (a : bool, b) = a <> b
    猜你喜欢
    • 2023-03-26
    • 2012-12-31
    • 2023-03-27
    • 2023-01-18
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多