現在OCamlを学びたいと思っています。そして、私はこのPythonコードの同等を探しています:OCamlの関数の引数としてリストを使う
f(*l[:n])
私はこの動作をエミュレートする関数を記述しようと思ったが、それは動作しません。ここでは、コードは次のようになります。
let rec arg_supply f xs n =
if n = 0 then
f
else
match xs with
| x :: remainder -> arg_supply (f x) remainder (n - 1);;
そして、ここでは、私が取得エラーメッセージです:
Error: This expression has type 'a but an expression was expected of type
'b -> 'a
The type variable 'a occurs inside 'b -> 'a
すべてのヘルプは高く評価され、それは私の機能の作業を取得する方法、または最初に供給するための別の方法でありますリストのn個の要素を引数として関数に渡します。
編集:n
は、関数を呼び出すために必要な引数の量であり、そのため定数です。
編集:これも機能しません。
type ('a, 'r) as_value = ASFunction of ('a -> ('a, 'r) as_value) | ASReturnValue of 'r;;
let rec _arg_supply f_or_rval xs n =
if n = 0 then
f_or_rval
else
match f_or_rval with
| ASFunction func -> (
match xs with
| x :: r -> _arg_supply (func x) r (n - 1)
| _ -> failwith "too few arguments for f"
)
| ASReturnValue out -> out;;
あなたはそれを行うことはできません。 'arg_supply'の型は' n'の実行時の値に依存しなければなりません。 – melpomene
これは典型的な[XY問題](http://xyproblem.info/)です。代わりにあなたが本当にやりたいことを説明できますか? – Drup
@Drup 'name_of_the_function(List.nth li 0)(List.nth li 1)(List.nth li 2)...'を書くことなく、引数がリストにある関数を呼びたいと思っています。 そして、戻り値の型がASFunctionでなければならないので、私が試した解決策がうまくいかなくても役に立ちません。しかし、私はこのタイプに合わせて機能を "拡張"することができました。 – CodenameLambda