3

のリストを持っている

{a, b, c, d}

と関数

f

リストを取得したい

{f[a], f[a,b], f[a,b,c], f[a,b,c,d]}

これを行う最も簡単な方法は何ですか?

4

3 に答える 3

4
f @@@ ({a, b, c, d}[[1 ;; #]] & /@ Range[4])

{f [a]、f [a、b]、f [a、b、c]、f [a、b、c、d]}

于 2012-12-18T16:03:34.443 に答える
3

これは正確には単純ではありませんが、機能します

lst = {a, b, c, d};
Block[{f}, SetAttributes[f, Flat]; FoldList[f, f@First@#, Rest@#]]& @ lst
(* {f[a], f[a, b], f[a, b, c], f[a, b, c, d]} *)

これも、非常によく似た質問に対する私の回答に基づいています。

f @@@ FoldList[#1~Join~{#2} &, {First@#}, Rest@#]& @ lst
(* {f[a], f[a, b], f[a, b, c], f[a, b, c, d]} *)
于 2012-12-18T23:05:40.317 に答える
2

いくつかの他の定式化:

f @@ Take[{a, b, c, d}, #] & ~Array~ 4

f[a, b, c, d] ~Take~ # & ~Array~ 4

Rest @ FoldList[Append, f[], {a, b, c, d}]

f最初のものを除くすべてが望ましくない方法で評価される可能性がありますがBlock、それを防ぐために使用できます。

f = Print;

Block[{f},
  f[a, b, c, d] ~Take~ # & ~Array~ 4
]

a

ab

abc

あいうえお

于 2012-12-21T14:04:27.547 に答える