将存储在列表中的参数传递给表达式
如何将值传递给具有多个变量的给定表达式?这些变量的值放置在需要传递到表达式中的列表中。
How can I pass values to a given expression with several variables? The values for these variables are placed in a list that needs to be passed into the expression.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您修改后的问题很简单,只需
@@
是应用
。在内部,{a,b,c}
是List[a,b,c]
(您可以通过使用FullForm
在任何表达式上),然后应用< /code> 只是替换
Head
、
List
,加上新的Head
、f
,改变了功能。Apply
的操作不限于列表,一般情况下也可以看看
Sequence
这样做所以,我们可以这样做
,虽然看起来迂腐但非常有用。
编辑:
Apply
有一个可选的第二个nd参数,用于指定级别,即注意:
Apply[fcn, expr, {1}]
是@@@
,正如所讨论的此处,但要指定任何其他级别描述,您需要使用完整的函数形式。Your revised question is straightforward, simply
where
@@
is shorthand forApply
. Internally,{a,b,c}
isList[a,b,c]
(which you can see by usingFullForm
on any expression), andApply
just replaces theHead
,List
, with a newHead
,f
, changing the function. The operation ofApply
is not limited to lists, in generalAlso, look at
Sequence
which doesSo, we could do this instead
which while pedantic seeming can be very useful.
Edit:
Apply
has an optional 2nd argument that specifies a level, i.e.Note: the shorthand for
Apply[fcn, expr,{1}]
is@@@
, as discussed here, but to specify any other level description you need to use the full function form.还有其他几种方法...
使用规则替换
<代码>f /。线程[{a,b} -> l]
(其中
Thread[{a,b} -> l]
将计算为{a->1, b->2}
) p>使用纯函数
函数[{a,b}, 评估[f]] @@ l
(其中
@@
是Apply[]的一种形式,Evaluate[f]
用于将函数转换为Function[{a,b} , a^2+b^2]
)A couple other ways...
Use rule replacement
f /. Thread[{a,b} -> l]
(where
Thread[{a,b} -> l]
will evaluate into{a->1, b->2}
)Use a pure function
Function[{a,b}, Evaluate[f]] @@ l
(where
@@
is a form of Apply[] andEvaluate[f]
is used to turn the function intoFunction[{a,b}, a^2+b^2]
)例如,对于
任意数量的元素的
两个元素或
因此:
另外两个,只是为了好玩:
编辑
关于您的定义
它有一些问题:
1)您正在定义一个常量,因为
a,b
不是参数。2) 您正在使用 Set 而不是 SetDelayed 定义函数,因此评估会立即完成。只需尝试一下示例
与正确的方法:
在您使用它之前,该方法将保持未评估状态。
3) 您使用的模式没有名称
{__}
,因此您不能在表达式的右侧使用它。正确的方法可能是:For example, for two elements
for any number of elements
or
So:
Two more, just for fun:
Edit
Regarding your definition
It has a few problems:
1) You are defining a constant, because the
a,b
are not parameters.2) You are defining a function with Set, Instead of SetDelayed, so the evaluation is done immediately. Just try for example
vs. the right way:
which remains unevaluated until you use it.
3) You are using a pattern without a name
{__}
so you can't use it in the right side of the expression. The right way could be: