まず、私はあなたの機能を理解していません。 R.cond([ [R.T, R.identity] ])
は、本質的にアイデンティティ関数であるものを書くのにやや奇妙な方法です。 cond
は通常、通常、デフォルトとして最後のもののための述語R.T
を使用して、複数の述語とアクションのペアを取る(switch
文のdefault
場合に類似。)このアップ(a) => R.cond([ [R.T, R.identity] ])
で
ラッピングは、単にあなたにあなたの機能を提供しますあなたが好きな引数を渡します。すぐに無視され、その奇妙な同一性関数を返します。
RAMDAによって作成された多くの機能と同様に、cond
の出力を使用すると、さまざまな方法で関数を呼び出すことが可能なカリー化のRAMDAの拡大概念を使用して、カレー機能です。例えば、g = curry(function f(a, b, c) {/* ... */})
場合、これらのすべては、f(a, b, c)
と同等です:
g(a, b, c)
g(a, b)(c)
g(a)(b, c)
g(a)(b)(c)
そして、あなたはパラメータの完全な補完よりも少ないで呼び出した場合、あなたは別の機能を取り戻す:
g(a); //~> curry((b, c) => f(a, b, c))
g(a, b); //~> curry((c) => f(a, b, c))
これが伸びますパラメータをまったく指定しなくても:
g(); //~> curry((a, b, c) => f(a, b, c)),
この最後のことは気付いていることです。 t1(1)
は、その奇数の同一性R.cond([ [R.T, R.identity] ])
を返します。この関数はカリーされているので、パラメータなしで呼び出すと、同じアイデンティティ関数に相当するものが返されます。
これは、関数がなぜ動作するのか説明する必要があります。私はあなたが解決しようとしている根本的な問題を知ることができないので、助ける方法がわかりません...
デフォルトを言及していることを除いて、RamdaのdefaultTo
が助けになる可能性があります。
@cubrrありがとう、ちょうどタイプミスを修正しました – tinlyx