[心得] 換頭術
NestWhile 跟 NestWhileList 的輸入長得一模一樣,只有輸出不同
i.e. 前者給的是 Last[後者]
以範例來講
NestWhile[#/2 &, 1234, EvenQ]
617
NestWhileList[#/2 &, 1234, EvenQ]
{1234, 617}
於是我就想說
有沒有可能實作一個函數 g[n_][r_]:=func[#/2 &, n, EvenQ]
當r=1時func換成NestWhile, r=2時換成NestWhileList
實務上可以直接加個Last@ 結果一樣
不過這篇的重點是也有換掉函數的頭(Head)這種獵奇(?)作法
之一
g[n_][r_] := func[#/2 &, n, EvenQ] /.
func -> Which[r == 1, NestWhile, r == 2, NestWhileList]
因為並沒有另外定義func,所以不換掉之前不會evaluate正好
之二
g[n_][r_] :=
Which[r == 1, NestWhile, r == 2, NestWhileList][#/2 &, n, EvenQ]
直接把Which[]一坨放前面,沒想到神奇的可以作用
寫成這樣似乎不必在意計算順序的問題,太好了
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.121.239
※ 編輯: jurian0101 來自: 140.112.121.239 (12/03 19:56)
推
12/03 21:19, , 1F
12/03 21:19, 1F
Mathematica 近期熱門文章
PTT數位生活區 即時熱門文章