看板 Mathematica 關於我們 聯絡資訊
※ 引述《TTLLIU (kerker)》之銘言: : Code: : hz = StringToStream[h1]; : h2 = ReadList[hz, Word]; : Close[hz]; : ToExpression[h2[[1]]]={1,2,3} : 簡單說明一下: : (1)h1本身是包含空格的String : (2)h2則把h1的每段String用空格為依據切成好幾個Word存成List : (3)第三步我則想要令h2中的Word為某個數值List : 前兩步都沒有問題,但是第三步會跳出錯誤訊息 : Set::write: Tag ToExpression in ToExpression[Energy] is Protected. : 這裡的Energy就是存在h2[[1]]中的字元。 : 目前看起來是lhs=rhs這個指令對lhs有所限制, : 不過總覺得我的思考方向可能有根本的錯誤......... : 不曉得有沒有高手可以指點一下呢?感恩。 Clear["Global`*"]; h1 = "ab bc cd"; data = {{1, 2, 3}, {2, 3, 4}, {3, 4, 5}}; hz = StringToStream[h1]; h2 = ReadList[hz, Word]; MapThread[Set[Evaluate@ToExpression[#1], #2] &, {h2, data}]; ab bc cd -- 養花種魚數月亮賞星星 http://chungyuandye.twbbs.org -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.173.134.62
LPH66:解釋一下, 這是因為 Set (=) 具有 HoldFirst 屬性, 06/07 21:41
LPH66:所以第一個參數會保留原狀 (這通常是想要的, 例如 a = 3 時 06/07 21:41
LPH66:我們顯然不該去求 a 的值而是將 a 這變數設為 3 06/07 21:42
LPH66:但這裡這就造成了問題) Evaluate 就是強制求值的意思 06/07 21:42
LPH66:在被保留的參數上用 Evaluate 則被套用的東西就會強制算完 06/07 21:43
LPH66:所以能夠以此來達成動態設定變數的目的 06/07 21:44
TTLLIU:感謝兩位解釋 非常有用的資訊!! 06/07 22:13