【问题标题】:Can I define a "rec" function in another "rec" function in Ocaml?我可以在 Ocaml 的另一个“rec”函数中定义一个“rec”函数吗?
【发布时间】:2017-03-04 08:56:01
【问题描述】:

我必须创建一个函数isFunction,它以一对夫妇的列表作为参数,如果考虑到每对夫妇中的第一个元素,则如果没有重复则返回 true,如果有重复则返回 false。

例如 :isFunction [(1,3);(2,40);(3,40)] 返回 trueisFunction [(1,3);(2,40);(1,40)] 返回 false 因为 1 重复。

目前,我的代码是:

let rec exist e = function
    |[] -> false
    |(a,_)::l -> e=a || exist e l;;
let rec isFunction = function
    |[]->true
    |(a,_)::l -> not(exist a l) && isFunction l;;

效果很好!但问题是:有没有另一种方法来定义isFunction而不定义另一个辅助函数?

【问题讨论】:

    标签: function recursion ocaml


    【解决方案1】:

    你可以使用 List.exists :

    let isFunction = function
      | []        -> true
      | (a,_)::tl -> not (List.exists (fun (a',_) -> a'=a) tl) && isFunction l;;
    

    【讨论】:

      【解决方案2】:

      您可以将exist 声明为isFunction 的本地:

      let rec isFunction l =
        let rec exist e = function
          |[] -> false
          |(a,_)::l -> e=a || exist e l
        in
        match l with
         |[]->true
         |(a,_)::l -> not(exist a l) && isFunction l
      

      【讨论】:

        猜你喜欢
        • 2019-04-19
        • 2010-10-17
        • 1970-01-01
        • 2023-03-16
        • 1970-01-01
        • 2013-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多