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 B C D

于 2012-12-21T14:04:27.547 回答