2009-08-10 60 views
3

是一種個人的實驗,以儘量瞭解編程和形式語言理論之類更好,我試着寫,基本上發生在一堆方程,並解決了語言或多或少地自動或啓發地未知。我試圖通過C.編寫解釋這樣做函數式編程和方程解算器

所有這一切不超相關的,雖然......在過去的幾天裏更重要的是,我發現函數式編程(我指的是我讀維基百科的條目和一個簡短的Haskell教程),它似乎處理與我想要做的非常類似的事情。

我猜我想知道的是,是否有其他語言,我應該看看,或任何非函數式語言,有圖書館或程序,試圖做類似的事情,以便我可以更好地瞭解我打算做什麼?

另外,有沒有什麼好的參考文獻可以用來編寫解釋器等?

謝謝。

P.S.哦,我知道我可以並應該使用Google。我在旁邊。更重要的是,我正在尋找什麼是好的「第二意見」的集合,以及之前人們使用過的。此外,我試圖更好地瞭解社區,因爲我是新來的。感謝您的耐心:-)

+0

從下面重新開始......關於口譯員,我設想的練習的重點是特別要寫一種新的語言 - 不是任何一個半腦子,腦子都會使用的語言,但是一個工作,有一個解釋程序,並且是基於方程式的(與我所瞭解的功能性程序設計很相似,儘管沒有那麼靈活)。對不起,我不清楚。請知道,我非常感謝迄今爲止的出色答案。 – 2009-08-11 20:42:11

+0

我只是寫了一個更新,讓人們知道我還活着,但是我沒有時間去充分了解人們發佈的內容。對不起,並再次感謝您通過麻煩發佈這樣的偉大的參考。 – 2009-08-14 15:26:51

回答

4

聲明:我沒有認真探討這個領域,而是希望這個小寫了也許對你有用 - 和等待,看看從別人更多的答案。

我認爲在一個問題有多個問題:

1)方程求解器。

如果你的意思是「解決未知因素」的象徵 - 這是一個相當大的工作,你即將開始使用,恕我直言:-)你即將開始創建一個computer algebra system

Term rewriting是本身就是一個相當大話題。如果你對這個級別的操作特別感興趣,C可能不是最容易處理的 - 你可能會更加放心Lisp來完成這個任務。值得注意的是,並非每一組方程式都有解決方案,而「只是」弄清它是否有解決方案的事實本身就是一項艱鉅的任務。

在另一方面,如果你仰望數值求解方程,像this可能是有趣的,看看。

2)一般的函數式編程。

Haskell是一個偉大的語言(雖然我仍然是一個非常初學者 - 我認爲它可能是最優雅的之一)。 OCaml可能是另一種探索的途徑。那麼,當然有計劃。如果您正在處理網絡編程,那麼具有直接實際意義的語言可能是XSLT。

當然,您可以在Ruby和Python中輕鬆編寫函數式樣。觀察學習新語言如何以「主要」語言改變您的編程模式是非常有趣的。所以,語言理論與否 - 你接觸的語言越多越好。

3)編寫口譯員等

我懷疑,考慮到問題的味道,對於你想做的事情最有意思的實際應用不是解釋器,而是編譯器中的優化代碼。爲此 - Dragon bookMIT computer language engineering course將在我看來是有用的開始。然後你可以抓住例如一個TCC的副本,並與它一起玩。如果你想修補一些不太常規的東西,看看potion--一個非常有趣的語言實驗,它以x86機器代碼作爲它的「字節碼」(因此x86機器的性能非常壯觀)。

This question on SO實際上引用了上面(3)中的大部分鏈接,還有更多。

+0

閱讀。稍後會給予適當的迴應。非常感謝這篇長文章,它裏面肯定有很多寶石。 (+1爲你,複選標記可能會在以後的日期) – 2009-08-11 04:53:02

+0

我很抱歉,我花了這麼長的時間纔回到這個。這是非常豐富的信息,非常感謝發佈。 – 2009-09-13 19:44:20

2

正如安德魯所說,你描述的核心被稱爲「計算機algegra系統」,更一般地說是「術語重寫系統」。閱讀這兩個領域應該讓你面向你。

而且,是的,我希望你會發現函數式編程是一個非常合適的範例。也許邏輯編程也是如此。

我的直覺是,你對翻譯的問題是跳躍從Greenspun's Tenth Rule槍和結果,這是

任何足夠複雜的C或Fortran程序包含一個特設非正式指定的,充滿錯誤的,緩慢的執行Common Lisp的一半。

您可以在其中將「Common Lisp」替換爲「函數式編程語言」。換句話說,如果你選擇並擁抱一個有意識地設計的函數式編程語言(對於你的計算機代數系統),你不需要無意識地(而且很糟糕地)創建一個函數式編程語言。功能語言中我個人最喜歡的是Haskell。對於新手來說,當你仍然需要編程時,Haskell的優勢在於讓你承認 - 通過靜態打字 - 。

+0

+1,謝謝你的回答。 關於口譯員,我設想的練習的重點是特別要寫一種新的語言 - 不是任何一個半腦子,腦子都可以使用的語言,而是一個有效的人,有一個口譯員程序,並且是基於方程式的(與我所理解的函數式編程非常相似,儘管沒有那麼靈活)。 對不起,我不清楚。再次感謝您深思熟慮的答案。 – 2009-08-11 20:40:52