我有这个本地功能。我必须用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
答案 0 :(得分:1)
您的问题很难理解,但如果我说得对:功能的本质是您可以根据需要多次调用它,使用不同的参数。
let sqdist (x0, y0) (x1, y1) =
let sq a = a * a in
sq (x1 - x0) + sq (y1 - y0)
我已将sq
定义为本地函数,我将其称为x1 - x0
和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
此处的示例代码存在许多重要差异。我认为你缺少的主要是对函数的递归调用。