您的定义中有一个无用的para2
参数。正确的方法是:
let myfunc2 para1 =
let x = ... in
let myfunc1 para2 = ... in
( x, myfunc1 );;
但如果我们能谈谈一个具体的例子,那将会有所帮助。你误解了一些明显的东西,但我不知道是什么。
这是一个具体的例子。假设我们想要一个函数f
,它接受一个数字n
并返回一个对(m, g)
,其中m
是的平方n
和g
是一个添加n
到其参数的函数:
let f n =
let m = n * n in
let g k = n + k in
(m, g)
或更短:
let f n = (n * n, fun k => n + k)
现在要使用它,我们可以这样做:
let x = f 10 ;;
fst x ;; (* gives 100 *)
snd x ;; (* gives <fun> *)
snd x 5 ;; (* gives 15, and is the same thing as (snd x) 5 *)
现在让我们考虑以下错误的解决方案,其中我们犯了您所犯的错误:
let f_bad n k =
let m = n * n in
let g k = n + k in
(m, g k)
现在f_bad
想要两个论点。如果我们只给它一个,我们将不会得到一对,而是一个期待另一个参数的函数。当我们给它这个参数时,它会返回一对两个整数,因为这(m, g k)
意味着“制作一对,其第一个分量是整数m
,第二个分量g
应用于k
,所以它也是一个整数。”
另一点值得说明的是,您通过调用两个不同的事物来混淆自己para2
。在我们的定义中,f_bad
我们还通过调用两个不同的事物来混淆自己k
。的k
定义中出现的g
和其他的不一样k
。最好将两者k
的不同事物称为:
let f_bad n k1 =
let m = n * n in
let g k2 = n + k2 in
(m, g k1)
现在,这有助于消除混乱吗?