有一个清单
{a, b, c, d}
和一个函数
f
我想得到一份清单
{f[a], f[a,b], f[a,b,c], f[a,b,c,d]}
最简单的方法是什么?
有一个清单
{a, b, c, d}
和一个函数
f
我想得到一份清单
{f[a], f[a,b], f[a,b,c], f[a,b,c,d]}
最简单的方法是什么?
f @@@ ({a, b, c, d}[[1 ;; #]] & /@ Range[4])
{f[a], f[a, b], f[a, b, c], f[a, b, c, d]}
这并不简单,但它确实有效
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]} *)
其他一些配方:
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