3行目から5行目は11行目から12行目の様に書けるようです。
19行目は何をやっているんだろうか?
どうやらlambdaの定義をやっているだけ、実行結果はない、のかも知れません。
Qでの出力は結果として
[0, 0+1, 0+1+2, 0+1+2+3, 0+1+2+3+4, 0+1+2+3+4+5]をやっている。
y + [[y[-1] + x]は何をやっている?
例えば今配列の3に注目しているとすると
x = 3で、y[-1] -> 0+1+2 = 3ですよね。
yはなにの意味ですかね?
それとlambdaの定義でy, xとなっている理由ですね?
どうもこの辺は、SchemeとかLispの知識の有る方用の機能に思えます。
違っているかも知れませんが。
>
>[0, 0+1, 0+1+2, 0+1+2+3, 0+1+2+3+4, 0+1+2+3+4+5]をやっている。
>
> y + [[y[-1] + x]は何をやっている?
>
>例えば今配列の3に注目しているとすると
>
> x = 3で、y[-1] -> 0+1+2 = 3ですよね。
>
> yはなにの意味ですかね?
yは初期値(この場合は[0])あるいは前回の計算結果、です。
結局、畳み込みで考えると
((((([0] + [0, 1]) + [1, 2]) + [3, 3]) + [6, 4]) + [10, 5])
ってのがここのreduceがやってる事、です。
上の式を展開して確認してみて下さい。
(注: ここの + は「加算」ではなく、「リストの結合」である事に留意)
> どうもこの辺は、SchemeとかLispの知識の有る方用の機能に思えます。
まぁ、Lisp由来なのは事実ですが、Microsoft F#なんかでも搭載されているし、RubyやJavaScriptにも搭載されています。
昨今だとJavaやC#、もうちょっと前でもC++にもテンプレートの一つとして搭載されています。
もはや、色んな言語に搭載されまくっていますね。
モダンな言語艦橋だと必須機能、って言って良いでしょう。