日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mathematica实现闭包

發布時間:2025/4/5 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mathematica实现闭包 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

犀利的問題與犀利的解答

參考來源:http://www.douban.com/group/topic/20803452/?start=0&post=ok#last

問題

定義一個函數add[x],每次調用可以將參數累加,例如:?
add[5]返回5,?
add[10]返回15,?
add[3]返回18,一直累加下去

解答

add = Module[{y}, y = 0; Function[x, y = y + x]]?

add[3]

add[5]

add[3]

分析

以上問題是要實現閉包的概念。

閉包是只有在允許函數嵌套的語言中才存在的現象,英文名是Closure,c++中自然是沒有的,當然可以把static變量理解成一定意義上的閉包。

這篇文章http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html?從javascript角度詳細闡述了閉包的概念,可以參考。

我們來分析一下上面的代碼:

首先是要了解Module的機制。Module中定義的變量y,是一個“局部變量”,但是mathematica中是沒有局部變量的概念的,因此Mathematica是通過創建一個匿名的臨時變量來模擬局部變量的效果,具體請參考幫助?tutorial/HowModulesWork

因此,在上述Module中,y實際上被定義成了 y$345(345是個隨機數,依賴于你工作到現在用過多少臨時變量了)

.

其次,需要注意的,是這里的add和Module的關系。要注意,這里的add并不是Module定義的這一段過程,而是Module這段過程的結果。也就是說,add是這個Module的返回值,而不是Module本身。

.

因此,你可以這么理解這段程序

f[] := Module[{y}, y = 0; Function[x, y = y + x]]

add = f[]

所以說,y=0的賦值總共只被執行了一次

而add相當于上面f[]的一個閉包,每次調用add函數就更新了y的值,相當于訪問了f[]里的局部變量。

.

至此,整段程序的原理一目了然了。

轉載于:https://www.cnblogs.com/dabaopku/archive/2011/06/30/2095076.html

總結

以上是生活随笔為你收集整理的mathematica实现闭包的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。