Mathematica怎樣才能提高可讀性?

Mathematica對於公式的可讀性好到爆表所以不提這個。

但是作為一種函數式語言,怎麼解決函數嵌套函數的再嵌套函數再嵌套函數……的可讀性?

難道是我的代碼風格不對嗎?

對於Python、C這種傳統語言出身的的人而言看這種代碼簡直渾身難受。

一個例子:

這一串括弧我真是醉了。


Mathematica 完全可以寫的優雅,很多情況下可讀性遠高於 python, C。

Mathematica 是個連 詞法、語法、語義,甚至部分 IDE 都可以自行定製的框架,原則上你完全可以把語法改成幾乎任何你想要的樣子。

建議看下官方文檔的一下條目:MakeBoxes, MakeExpression, TemplateBox。再學下 Notation Package,KeyEventTranslations(非文檔化)連輸入方式都可以定製了。典型的應用比如張量指標。

就你這個例子而言,還不需要這些黑魔法,搞清楚 grid 怎麼輸入就行了。至於嵌套函數,後面寫一串 // 就行了,可讀性至少比 C 里一堆 ((),((,((,))))) 強吧。

C, python 這種一維純 text 語言才真是上個世紀的。

背景相關:精通彙編,C,Mathematica

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

想像一下 C + WinAPI 要寫個類似的東西會是啥樣。。


謝邀。

首先得承認Mathematica可讀性就是差,沒辦法。自己寫的久一點的code一眼掃過去自己一時半會可能也不認識。

其次,不要非把code寫成一句。可以用一些變數,然後把複雜的一句拆成幾句來寫。

最後,牆裂推薦一個神器:Home 這是一個插件,可以配合JetBrains任一款IDE使用,比如IntelliJ IDEA, 非常好用,特別適合稍微大一點的Mathematica項目。JetBrains旗下的IDE學生可以免費使用,只要有edu郵箱(edu.cn也行)就可以。


mmtc被你用成這樣才是讓人醉了。

既然知道mmtc是函數化的編程,那麼為什麼不用自定義函數呢;

比如column下的數據完全可以寫為函數

dataColumn[x_]:=Column[此處省略]//TableForm;

Point下數據生成函數寫為

dataPoint[x_]:={你自己需要輸入的數據};

另外,二維point是不是可以考慮用ListPlot代替

=============================================

你的程序是不是就可以成:

dataColumn[x_]:=Column[此處省略]//TableForm;

dataPoint[x_]:={你自己需要輸入的數據};

Manipulate[dataColumn[x],Graphics[dataPoint[x],other options],{x}]

或者

Manipulate[dataColumn[x],ListPlot[dataPoint[x],other options],{x}]

=============================================

這比一個manipulate佔一頁可讀性好很多吧。

這個方式才跟函數化語言貼點兒邊兒,醒醒吧,別醉了

===========================================================

回復給 @St Jason (希望沒@ 錯)

示例:

上面這個很基礎,應該都能看懂,由於計算中一些基礎的表達式需要以多樣的方式(「積分求導改變係數的多項式三角函數複變函數等各種整理」 和 「賦值」)重複使用,因此盡量保留一個不會變動的原始形式,以免與賦值狀態衝突。

如果你喜歡使用x=C這類賦值表達式,函數是個很好的辦法避免使用衝突,如2.2 和2.3。

另一個方式就是依舊使用變數定義,後用 EQx=EQ1 /.{x-&>C}的方式,不改變原變數的情況下得到相應數值EQx。

多說點兒,說說畫圖和數據:

畫圖要使用到的更複雜些,上面用的都是替換,完全是從 {符號 -&> 數值}的替換處理

函數也是個很好的處理辦法,比如這樣:

如果用map函數也許會更簡單,但這裡說個作弊的方案

從Plot得到圖像後,逆向得到繪圖數據,這個高級的玩法很值得記住,這是隱函數畫圖中mmtc牛到爆表的地方,比如畫圓

相比之下,下面的是不是就弱爆了

左右邊界無法做到精細,如果做函數要複雜很多。

註:關於圓的例子,別拿極坐標來說事,極坐標無法解決所有隱函數。


我覺得首先得知道每個函數的意思,然後從中間看,最外圍是最後的過程


推薦閱讀:

為什麼程序語言要設計成使用這麼多shift?
為什麼說 Smalltalk 超前了 20 年?
Mathematica 這門語言怎麼樣?
UE4 C++編程學習路線?
2025年的編程語言將會是怎樣的?

TAG:編程語言 | WolframMathematica | 代碼風格 |