我期待創建一個DSL,我正在尋找一種語言,您可以在其中定義您自己的支架式運算符,如floor and ceiling functions。我寧可不去定義我自己的Antlr解析器的自定義語法的路線。哪些編程語言允許您定義像配對括號一樣的運算符?
就我所知,我所知道的只允許定義自定義運算符的語言都是二進制中綴運算符。
tl; dr:哪些語言允許定義成對符號(如左括號/右括號)運算符?
另外,我不認爲這個問題是如何被「過於寬泛,」如果沒有人命名具有此單一語言和標準是非常具體的,肯定在編程領域。
我期待創建一個DSL,我正在尋找一種語言,您可以在其中定義您自己的支架式運算符,如floor and ceiling functions。我寧可不去定義我自己的Antlr解析器的自定義語法的路線。哪些編程語言允許您定義像配對括號一樣的運算符?
就我所知,我所知道的只允許定義自定義運算符的語言都是二進制中綴運算符。
tl; dr:哪些語言允許定義成對符號(如左括號/右括號)運算符?
另外,我不認爲這個問題是如何被「過於寬泛,」如果沒有人命名具有此單一語言和標準是非常具體的,肯定在編程領域。
由於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組詢問,有人會找到更好的解決方案。
+1。好問題和一個非常好的答案。 – Yavar
我同意:很好的問題,很好的答案。但是,我仍然不禁想:假設你將這個定製選項添加到你最喜歡的語言中。輸入異國括號總是不痛苦嗎? – comingstorm
@comingstorm嗯,你只是宏觀中的括號,但不,我不這麼認爲:代碼閱讀的方式比它寫的更頻繁,所以你想優化閱讀不寫。;)另外,請記住這是針對DSL的,因此它的使用會相當有限。 – ArtB