如何以增量方式将函数应用于列表?

时间:2012-12-18 15:22:23

标签: list wolfram-mathematica apply

列出

{a, b, c, d}

和一个功能

f

我希望得到一份清单

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

最简单的方法是什么?

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分: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]} *)

这也是基于我的answer到非常相似的question

f @@@ FoldList[#1~Join~{#2} &, {First@#}, Rest@#]& @ lst
(* {f[a], f[a, b], f[a, b, c], f[a, b, c, d]} *)

答案 2 :(得分: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
]
  

     

AB

     

ABC

     

ABCD