OCamlに基づくいくつかのモジュールをF#に変換していますが、このようなものに遭遇しました
let [x; y; z] = map func1 ["a"; "b"; "c"]
where [x; y; z]
は識別子
map func1 ["a"; "b"; "c"]
のリストで、関数のリストを返します。
現在、リスト内の各値を個別に識別子にバインドしています。
let fList = map func1 ["a"; "b"; "c"]
let x = fList.[0]
let y = fList.[1]
let z = fList.[2]
識別子の使用は、2 番目の機能、つまり
func2 x y z
リストを受け入れるように func2 を変更できることはわかっていますが、実際には func2 は各パラメーターの各関数と一緒に値を取得するため、さらに多くの作業が必要になります。すなわち
func2 (x g) (y h) (z i)
OCaml と同じくらい効率的にこれを行う方法を探しましたが、空っぽになりました。unmap、deconstruct を検索し、Listのメソッドを調べました
F# は値のリストを識別子のリストに直接マップできますか?
編集
私が変換しているコードは、独自のライブラリで map 関数を定義しています。
編集
@OnorioCatenacci実際に機能する例を作成するのに何分も費やすのではなく、例として書いたものにすぎません。実際のコードには著作権があるため、完全な開示なしにここで使用することはできません。私が言おうとしていたポイントは、識別子に定数値を割り当てていたのではなく、関数を識別子に割り当てていたということでした。map func1 ["a"; "b"; "c"]
ハードコーディングされたものではなく、何らかの入力に基づいて必要に応じて関数が生成されていることを示すためだけに入力しました。実際のコードは論理回路シミュレータを構築し、返される関数は異なる論理回路です。コンビネータを考えてください。それはすべて、自動化された定理証明器の一部です。Tomas と Daniel は質問を理解し、私が実際のコードで検証した正しい答えを出しました。
つまりfunc1 "a"
、パラメータを使用して関数を返します"a"
。map func1 ['a", "b", "c"]
関数のリストを返します。関数はF# ではファースト クラスであるため、値として返すことができます。