List[]从List不同级别的表达式中出现的所有s中删除所有空对象的最有效方法是什么?List[]只有当它是另一个List自身的元素时才应该删除空.
假设我有一个Symbols 的名字列表:
f1 := Print["f1 is evaluated!"];
list = {"f1", "f2"};
Run Code Online (Sandbox Code Playgroud)
以明显的方式Block,这些Symbol小号导致他们的评价:
In[19]:= With[{list=Symbol/@list},Block[list,f1//ToString]]
During evaluation of In[19]:= f1 is evaluated!
During evaluation of In[19]:= f1 is evaluated!
Out[19]= Null
Run Code Online (Sandbox Code Playgroud)
但是如果没有评估我们就可以Block毫无问题
In[20]:= Block[{f1, f2}, f1 // ToString]
Out[20]= "f1"
Run Code Online (Sandbox Code Playgroud)
是否可以在Block不评估Symbols的情况下将此列表注入范围?
专家们的轻量级问题.我无法想象这个替换的正确语法.我有这个清单
Clear[a, b, c, d]
polesList = {{3, {a, b}}, {5, {c, d}}};
Run Code Online (Sandbox Code Playgroud)
它是一个列表的形式,子列表每个都有{order,{x,y}}的形式,我想生成这个形式的新列表(x + y)^ order
目前这就是我的工作,它有效:
((#[[2, 1]] + #[[2, 2]])^#[[1]]) & /@ polesList
(* -----> {(a + b)^3, (c + d)^5} *)
Run Code Online (Sandbox Code Playgroud)
但我一直在努力学习使用,ReplaceAll因为它比纯函数更清晰,因为我可以更好地看到模式,如下所示:
Clear[a, b, c, d, n]
polesList = {{3, {a, b}}, {5, {c, d}}};
ReplaceAll[polesList, {n_, {x_, y_}} :> (x + y)^n] (*I thought this will work*)
Run Code Online (Sandbox Code Playgroud)
我得到了奇怪的结果,这是
{(5 + c)^3, {(5 + d)^a, (5 + d)^b}}
Run Code Online (Sandbox Code Playgroud)
使用ReplaceAll而不是使用纯函数方法进行此替换的正确语法是什么?
谢谢
更新:
我发现使用Replace而不是 …