Mathematica的每一個筆記本是一個獨立進程嗎?

為什麼我新打開一個筆記本,編號從上一個筆記本的下一個編號開始?如果是同一進程,我重複定義的變數是不是會覆蓋掉前面的定義(值)。


目前最高得票的回答是不正確的。第一,Wolfram說過,Mathematica里的任何東西都是表達式,而不是函數。第二,notebook跟frontend不是一回事。

-----------------------------------------------

1)Mathematica負責計算的是kernel進程,負責跟用戶交互的是mathematica進程,該進程又俗稱frontend 。對於多核的電腦,一般默認會有多個kernel啟動。

2)共享一個kernel進程的多個session是連續的(即你說的不同的notebook,編號是連續的,你定義的變數是要跟kernel通信的,都是同一個kernel,重複賦值當然會覆蓋)

3)我目前沒有安裝Mathematica. 我印象中是可以在mathematica界面里修改配置,讓新的notebook對應新的kernel. 當然,你也可以重新開啟一個Mathematica進程

-----------------------------------------

打開Mathematica,Evaluation---&>notebooks default context ----&> unique to this notebook


大家經常說mathematica裡面任何東西都是一個表達式,for啦,if啦,當然都是,筆記本文檔也不例外。

你可以輸入Notebooks[]來查看現在有多少個筆記本前端在運行。而每一個筆記本事實上都是Notebook[{***},***]這樣一個函數。那麼你的frontend,也就是你能看見的那一坨只負責處理顯示這些筆記本,而kernel則負責去進行計算。所以呢,不論你開了多少個notebook,本質上他們的運行指令都在往同一個kernel裡面跑,所以自然kernel表示我並不認識哪個是哪個,就繼續編號吧,還有,反正你們都往我這裡面走,那麼定義自然也是要延續的嘍。這就解釋了為何它連續編號且互相影響。

當然假如你想多開但是不影響的話,自然要要求在兩個notebook裡面運算的請求會往兩個不同的kernel裡面走並且運行。最簡單的方法自然是開兩個mathematica的主進程啦(注意,不是一個主進程兩個kernel偶~)

就這樣,希望能讓你對這個問題以及一系列關於其他notebook底層有關的問題有所了解。

已經根據cymatics的回答進行修改。謝謝指正


是同一個WolframKernel。

變數定義以後就是全局變數,對所有的notebook都有影響。


推薦閱讀:

除了專業領域外,Mathematica 在日常生活有什麼有趣用處?
Mathematica 做數值計算時有哪些方式可以達到提速的目的?
如何寫出易讀的 Mathematica 代碼?
Mathematica如何導入某個csv或者excel文件的指定行和列?

TAG:WolframMathematica |