定義に役に立たない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_bad
2 つの引数が必要になりました。1 つだけを指定すると、ペアは取得されず、他の引数を期待する関数が取得されます。そして、その引数を与えると、2 つの整数のペアを返します。これは、(m, g k)
「最初のコンポーネントが整数m
で、2 番目のコンポーネントが にg
適用されるk
ペアを作成するため、それも整数である」という意味だからです。
もう 1 つの重要な点は、2 つの異なるものを呼び出すことで自分自身を混乱させているということですpara2
。の定義でf_bad
は、2 つの異なるものを呼び出すことによって、自分自身を混乱させk
ます。のk
定義に現れる はg
、他の と同じではありませんk
。k
2つの異なるものを呼び出す方が良いです:
let f_bad n k1 =
let m = n * n in
let g k2 = n + k2 in
(m, g k1)
さて、それは混乱を解消するのに役立ちますか?