定義に役に立たないpara2パラメーターがあります。正しい方法は次のとおりです。
let myfunc2 para1 =
let x = ... in
let myfunc1 para2 = ... in
( x, myfunc1 );;
しかし、具体的な例について話していただけると助かります。あなたは明らかなことを誤解していますが、私には何がわかりません。
これが具体的な例です。f数値を受け入れてnペアを返す関数が必要であるとします(m, g)。ここで、mは の 2 乗で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_bad2 つの引数が必要になりました。1 つだけを指定すると、ペアは取得されず、他の引数を期待する関数が取得されます。そして、その引数を与えると、2 つの整数のペアを返します。これは、(m, g k)「最初のコンポーネントが整数mで、2 番目のコンポーネントが にg 適用されるkペアを作成するため、それも整数である」という意味だからです。
もう 1 つの重要な点は、2 つの異なるものを呼び出すことで自分自身を混乱させているということですpara2。の定義でf_badは、2 つの異なるものを呼び出すことによって、自分自身を混乱させkます。のk定義に現れる はg、他の と同じではありませんk。k2つの異なるものを呼び出す方が良いです:
let f_bad n k1 =
let m = n * n in
let g k2 = n + k2 in
(m, g k1)
さて、それは混乱を解消するのに役立ちますか?