Haskellには、アイテムのリストを1つの値に減らすために、アイテムのリストに対して操作を実行できるようにする2つの関数があります。(もちろん、2つ以上ありますが、これらは私が興味を持っている2つです。)それらはfoldl1
とfoldr1
です。実行する操作が可換(加算など)の場合、どちらを使用してもかまいません。結果は同じになります。ただし、演算が可換でない場合(たとえば、減算)、2つは非常に異なる結果を生成します。例えば:
foldr1 (-) [1..9]
foldl1 (-) [1..9]
最初の答えは5で、2番目の答えは-43です。に相当するJfoldr1
は、挿入副詞です/
。たとえば、
-/ 1+i.9
これは。と同等ですfoldr1 (-) [1..9]
。挿入副詞のように機能するが、右ではなく左に折りたたまれる副詞をJで作成したいと思います。私が思いつくことができる最高のものは次のとおりです。
foldl =: 1 : 'u~/@|.'
したがって、次のように言うことができます。
- foldl 1+i.9
答えとして-43を取得します。これは、左の折り目から予想されるものです。
Jでこれを行うためのより良い方法はありますか?何らかの理由で、y
議論を逆にすることは私には効率的ではないようです。おそらく、それに頼る必要なしにこれを行う方法があります。