2013-11-14 22 views
2

我期待創建一個DSL,我正在尋找一種語言,您可以在其中定義您自己的支架式運算符,如floor and ceiling functions。我寧可不去定義我自己的Antlr解析器的自定義語法的路線。哪些編程語言允許您定義像配對括號一樣的運算符?

就我所知,我所知道的只允許定義自定義運算符的語言都是二進制中綴運算符。

tl; dr:哪些語言允許定義成對符號(如左括號/右括號)運算符?


另外,我不認爲這個問題是如何被「過於寬泛,」如果沒有人命名具有此單一語言和標準是非常具體的,肯定在編程領域。

+0

+1。好問題和一個非常好的答案。 – Yavar

+0

我同意:很好的問題,很好的答案。但是,我仍然不禁想:假設你將這個定製選項添加到你最喜歡的語言中。輸入異國括號總是不痛苦嗎? – comingstorm

+0

@comingstorm嗯,你只是宏觀中的括號,但不,我不這麼認爲:代碼閱讀的方式比它寫的更頻繁,所以你想優化閱讀不寫。;)另外,請記住這是針對DSL的,因此它的使用會相當有限。 – ArtB

回答

3

由於Fortress已經死了,我所知道的唯一可以想象的東西就是FORTH遺產。

在我所知道的所有其他方面,花括號,括號和括號已經被大量使用,並且不能進一步超載。

我建議放棄這種東西的追求並獲得舒適的書寫

floor x 
ceiling y 

但是還是功能應用在您所選擇的語言來表達。

但是,在你引用的文章中,據說:Unicode在U + 2308-U + 230B中包含這些符號的代碼點:⌈x⌉,⌊x⌋。

因此,你可以在Haskell的至少將此定義爲運營商如語言和使用,如:

infix 5 ⌈⌉ 
(foo ⌈⌉) 

最好我能想出是這樣的:

--- how to make brackets 
module Test where 

import Prelude.Math 

infix 7 `«` 
infix 6 `»` 

_ « x = Math.ceil x 
(»)  = const 

x =() «2.345»() 

main _ = println x 

輸出是:3.0 (這實際上不是Haskell,而是Frege,一種類似於Haskell的JVM語言。)

請注意,我使用«»替代⌈⌉,因爲我以某種方式在我的IDE中沒有可以正確顯示括號符號的字體。 (這是另一個理由不這樣。)

它的工作方式是與infix指令,我們得到這個解析爲

(») ((«)() 2.345) () 

(有人可能會取代()的插入任意表達式)

也許如果你在Haskell組詢問,有人會找到更好的解決方案。

+0

我試圖使用現有的表示法,以方便域專家進行審覈。 – ArtB

+0

我明白了。但即使是專家也應該能夠學習一種新的符號。據我所知,數學家在這方面非常靈活,因爲無論如何,大多數論文都定義了自己的符號。 – Ingo

+0

即使在Haskell中,仍然沒有辦法說'⌈5.5⌉'? – ArtB