-3

我有这个本地功能。我必须用 a 来编写它,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
4

1 回答 1

1

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

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

在这里,我定义sq为一个本地函数,我将它称为 forx1 - x0和 for y1 - 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

这里与您的示例代码有许多重要区别。我认为您缺少的主要内容是对您的函数的递归调用。

于 2013-06-12T14:34:53.597 回答