如何将值传递给具有多个变量的给定表达式?这些变量的值放置在需要传入表达式的列表中。将列表中存储的参数传递给表达式
回答
例如,对于两个元件
f[l_List]:=l[[1]]^2+l[[2]]^2
为任何数量的元件
g[l_List] := l.l
或
h[l_List]:= Norm[l]^2
因此的:
Print[{f[{a, b}], g[{a, b}], h[{a, b}]}]
{a^2 + b^2, a^2 + b^2, Abs[a]^2 + Abs[b]^2}
两个,只是为了好玩:
i[l_List] := [email protected][j^2, {j, l}]
j[l_List] := SquaredEuclideanDistance[l, ConstantArray[0, Length[l]]
编辑
关于你的定义
f[{__}] = a^2 + b^2;
它有几个问题:
1)你要定义一个常量,因为a,b
不是参数。
2)您正在使用Set定义一个函数,而不是SetDelayed,因此评估立即完成。刚刚尝试例如
s[l_List] = Total[l]
与正确的方式:
s[l_List] := Total[l]
使用之前将其保持不计算。
3)您使用的图案没有名称{__}
,因此您不能在表达式的右侧使用它。正确的做法可能是:
f[{a_,b_}]:= a^2+b^2;
一对夫妇的其他方式...
使用规则置换
f /. Thread[{a,b} -> l]
(其中
Thread[{a,b} -> l]
将评估为{a->1, b->2}
)使用纯函数
Function[{a,b}, Evaluate[f]] @@ l
(其中
@@
是一种形式的应用[]和Evaluate[f]
用于将功能成Function[{a,b}, a^2+b^2]
)
是的。我们可以写一个博客:1001种方法来获得'SquaredEuclideanDistance []'而不提及它。 :D – 2011-03-03 04:03:47
我避免提及Dot [l,l] b/c我认为它有点太过于关注问题的细节... – 2011-03-03 04:18:28
...直到现在,就是这样。 :-) – 2011-03-03 04:18:54
你的修订的问题是简单的,只需
f @@ {a,b,c,...} == f[a,b,c,...]
其中@@
是简写Apply
。在内部,{a,b,c}
是List[a,b,c]
(您可以在任何表达式上使用FullForm
查看),而Apply
只是用Head
,List
,用新的Head
,f
更改函数。的Apply
操作并不局限于名单,一般
f @@ g[a,b] == f[a,b]
而且,看Sequence
这确实
f[Sequence[a,b]] == f[a,b]
所以,我们能做到这一点,而不是
f[ Sequence @@ {a,b}] == f[a,b]
其中而迂腐看起来可能非常有用。
编辑:Apply
有一个可选的2 第二参数,指定一个水平,即
Apply[f, {{a,b},{c,d}}, {1}] == {f[a,b], f[c,d]}
注:Apply[fcn, expr,{1}]
速记是@@@
,如所讨论的here,但以指定任何其他级描述你需要使用全功能表格。
- 1. 将列表传递给存储过程
- 2. 将列表结构作为参数传递给存储过程
- 3. 将参数传递给表达式并从中获取输出?
- 4. 将列表传递给params参数
- 5. 将参数列表传递给Auto.Arima
- 6. 将列表参数传递给llply
- 7. 将参数传递给存储过程
- 8. 如何将表名作为参数传递给存储过程?
- 9. 将参数值传递给隐藏元素表达式。 BIRT
- 10. 使用Lambda表达式将参数传递给线程
- 11. 将存储过程的结果传递给C#中的列表
- 12. 如何将存储过程的参数传递给选定的列表?
- 13. Yii的AccessRules传递参数给回调函数的表达式
- 14. Android数据绑定传递给lambda表达式的onClick参数
- 15. 传递lambda表达式作为参数
- 16. Powershell:将参数传递给存储在变量中的函数
- 17. SQL LOOP将临时表中的值作为参数传递给存储过程
- 18. 如何将表参数传递给EF Core中的SQL Server存储过程?
- 19. 将参数传递给Google图表javascripts
- 20. 将参数传递给VFP 9表格
- 21. 将参数传递给rails 3表格
- 22. 如何将参数传递给python中的JMES路径表达式
- 23. 将参数传递给实体框架中的可重用表达式
- 24. 将表达式和lambdas参数传递给F#中的C#扩展方法
- 25. Go - 将数组传递给接收参数列表的函数
- 26. 将列表传递给类
- 27. 传递参数给存储过程从一个临时表
- 28. 将查询结果传递给存储过程中的参数
- 29. 将值传递给存储过程中的参数
- 30. 将参数传递给c中的sql存储过程#
@ user642327请允许我欢迎你们来的StackOverflow,并提醒三件事,我们通常在这里做的:1)当你得到帮助,尽量给它太**回答问题**你专业2)的面积['阅读常见问题解答](http://tinyurl.com/2vycnvr)3)当您看到好的问答时,请将它们投票['使用灰色三角形](http://i.imgur.com/kygEP.png)“该系统的可信度基于用户通过分享知识获得的声誉。另外请记住接受更好地解决您的问题的答案,如果有的话,['通过按复选标记](http://i.imgur.com/uqJeW.png) – 2011-03-03 04:05:20