如何用let in(in ocaml)编写递归函数

时间:2013-06-12 11:20:39

标签: pattern-matching ocaml

我有这个本地功能。我必须用let ... in编写它,因为在其他情况下我得到语法错误。我怎么能这样做呢before而且after呢!我们先说看之前:

before = "a/drivers/usb/gadget/.../file"

after看起来像这样:

after = "b/drivers/usb/gadget/..../file"`

我的rec函数看起来像这样:

let rec f (before: string list) : string list =
          begin match Str.split (Str.regexp "/") before  with 
                         | _ ::rest -> out (String.concat "/" rest)
                         | _ -> ()
              end

1 个答案:

答案 0 :(得分:1)

您的问题很难理解,但如果我说得对:功能的本质是您可以根据需要多次调用它,使用不同的参数。

let sqdist (x0, y0) (x1, y1) =
    let sq a = a * a in
    sq (x1 - x0) + sq (y1 - y0)

我已将sq定义为本地函数,我将其称为x1 - x0y1 - y0

<强>更新

现在听起来像你的函数应该处理列表的所有元素。这是你在现实生活中使用List.map的东西。要使用递归进行自己的映射,您的代码将如下所示:

let squareEveryInt (list: int list) : int list =
    let rec go l =
        match l with
        | [] -> []
        | n :: rest -> n * n :: go rest
    in
    go list

此处的示例代码存在许多重要差异。我认为你缺少的主要是对函数的递归调用。