Mathematica 關於惰性求值

2021-09-25 20:17:04 字數 617 閱讀 2298

mathematica中,預設情況下是非惰性的,例如

x=2;f[x]
他實際計算的時候並不是先計算f[x]然後把x=2代入,而是先計算引數,發現x=2,然後直接計算f[2]

如何改變這一情況呢,有兩種方法

1. 改變函式特性

例如setattributes[f, holdall],這裡的holdall就可以保證函式f的引數在傳入的時候不會被計算,在函式體中用到的時候才會計算

2. 通過unevaluated作為引數,臨時改變屬性

例如上面的例子f[unevaluated@x],就可以了

其他常用的就這兩種,其他的用法就自行查閱幫助了

注意畢竟內建函式的**看不到,實現某些需求的時候要進行的操作還是很奇怪的,比如這個群友給出的例子,要套兩層才可以……

arrayreshape[range[10],,unevaluated@unevaluated@randominteger[10]]

惰性程式設計和惰性求值

惰性程式設計是一種將對函式或請求的處理延遲到真正需要結果時進行的通用概念。有很多應用程式都採用了這種概念,有的非常明顯,有些則不太明顯。從惰性程式設計的角度來思考問題,可以幫您消除 中不必要的計算,也可以幫您重構程式以使之更加面向問題。scheme 中的簡單惰性程式設計 惰性程式設計是這樣一種技術 ...

關於正則捕獲和正則的懶惰性

正則捕獲 把乙個字串中和正則匹配的部分獲取到 正則 exec test 字串 replace split match 基於exec可以實現正則的捕獲 1.如果當前正則和字串不匹配,捕獲的結果是null 2.如果是匹配 捕獲的結果是乙個陣列 0 大正則捕獲的內容 index 正則捕獲的起始索引 inp...

時間預估 mathematica程式

新版本見 基於一次回歸和二次回歸進行時間預估。具體來講,基於你之前看連續劇 漫畫的時間位置資訊,來 之後第幾集什麼時候看完。時間預估 基於一次 二次回歸運算 created by barrypp at 20120909235258 todo 考慮將 預計時間 的輸出方式改為table tmfof 2...