2

我目前正在實施Clojure中的不同的語言(Shen)。./ Clojure中(合格標誌?)

沉具有符號「./」,但在Clojure中,這是前誤差的評價,因而結果解釋。 我不需要在編譯這個函數到Clojure代碼的宏裏面的「./」。

有沒有辦法忽略這個? 我認爲它被解釋爲一個合格的符號,但沒有名稱,因爲用/或xyz /替換它會得到相同的錯誤消息。

我目前的宏觀很簡單,只要

(defmacro kl/trap-error [x [y z r]] `(try ~x (catch Exception '~z ~r))) 

但是,當我跟沉代碼中調用它會發生以下情況:

kl=> (trap-error (/ 1 0) (./ E (error-to-string E) 
RuntimeException Invalid token: ./ clojure.lang.Util.runtimeException (Util.java:156) 
CompilerException java.lang.RuntimeException: Unable to resolve symbol: E in this context, compiling:(NO_SOURCE_PATH:0) 
CompilerException java.lang.RuntimeException: Unable to resolve symbol: E in this context, compiling:(NO_SOURCE_PATH:89) 

我希望有人能幫助我與此有關。

在此先感謝。

+1

在CL你可以使用| ./ |,我不知道它是否適合Clojure的。 – Daimrod 2012-01-08 17:34:07

+1

據我所知,你需要一個自定義閱讀器才能在Clojure中做到這一點,但我不確定。 – danlei 2012-01-08 18:00:18

+0

@danlei:但據我所知Clojure中沒有一個標準的方式來定義一個宏讀者,你有[亂砍位(http://briancarper.net/blog/449/clojure-reader-macros ),並沒有真正感激。 – Daimrod 2012-01-08 21:00:32

回答

2

這是不可能的,而無需修改的Clojure讀取器(未給出的Clojure程序員特權)。你的陳述「Shen有一個符號./但在Clojure中,這是在評估之前解釋的,因此導致錯誤」是不正確的,但是 - 根本沒有解釋或評估,因爲讀者看到這些字符,甚至無法弄清楚他們應該是什麼數據類型。

  • 他們是一個列表?沒有,沒有parens。
  • 他們是一個字符串?不,沒有引號。
  • 它們是符號嗎?不,會有一個名字空間,但沒有名字。
  • ...更多像這樣的情況...
  • 我放棄了,這不是一個代表有效Clojure代碼的數據結構。
+0

因此,在Clojure REPL中編寫沉默代碼是不可能的,對吧?僅在使用例如文件之前閱讀文件並替換「./」。讀串... – 2012-01-09 09:48:42

+0

好吧。 clojure.main/repl允許你指定一個將被用於讀取而不是內置的函數。所以對於將它寫在repl上的具體情況,你可以做一些小工作。但是要求文件沒有這樣的鉤子,所以我認爲在一般情況下你不能做任何事情。 – amalloy 2012-01-09 20:24:58

+0

謝謝。我可能會嘗試寫一個可以閱讀這個的「沉REPL」。現在我只能閱讀沉文件並替換/。由lambda評估前。 – 2012-01-11 21:13:02