如何將值傳遞給具有多個變量的給定表達式?這些變量的值放置在需要傳入表達式的列表中。將列表中存儲的參數傳遞給表達式
回答
例如,對於兩個元件
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