【问题标题】:nested if - else statements -ocaml嵌套 if - else 语句 -ocaml
【发布时间】:2016-10-05 04:38:37
【问题描述】:

我们可以在 ocaml 的 if-else 循环中执行多项操作吗?

我正在尝试执行以下操作:

let rec appendtolist n list b  =

    let f x =

        if ( b < 0 ) then x

        else if (b == 0) then ((appendtocode n (List.hd list) ) (b-1)) (* THIS LINE *)

        else ((appendtocode n (List.hd list)) :: (appendtolist n (List.tl list) (b-1)) )

    in

    f list

    ;;

编译器在我加粗的那一行抱怨:

这个表达式不是函数,不能应用

我想在b==0 时调用我的函数,同时减少b 的值。

在这种情况下我该怎么做?

请指教。

谢谢。

【问题讨论】:

    标签: ocaml


    【解决方案1】:

    这和before基本是一样的错误。

    你正在评估

    appendtocode n (List.hd list)
    

    它返回一个值,它不是一个函数。然后你尝试用b-1 作为它的参数来调用它,但是因为它不是一个函数,所以你不能这样做。

    我想在 b==0 时调用我的函数,同时减少 b 的值。

    为谁递减bb 是函数appendtolist 的一个参数,因此如果您递归调用appendtolist,您可以为b 提供一个新参数,这就是您在else 案例中所做的事情,并且效果很好.但在then 的情况下,您不会调用appendtolist。您只调用appendtocodeappendtocode 没有第三个参数b。所以传递它b-1 根本没有意义。

    我的猜测是,如果您删除 b-1,您的程序会正常运行。

    PS:这个问题与嵌套的ifs 完全无关。

    【讨论】:

    • appendtocode 返回一个字符串。我想调用它并减少 b 的值。
    • gr8!我刚刚删除了 b-1 并再次调用了 appendlist。工作gr8!谢谢 :) 很抱歉造成混乱。还在努力学习这门语言:)
    【解决方案2】:

    快速猜测:

    表达式为

    ( appendtocode n (List.hd list) )
    

    返回不是函数的东西,因此您不能将 (b-1) 的值应用于您正在尝试做的事情。要进行验证,您可以查找 appendtocode 的类型并查看它可以接受两个或三个柯里化参数。

    【讨论】:

    • 我不想将 b-1 应用于 appendtocode。我只想在这个函数中减少 b-1。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    相关资源
    最近更新 更多