Clojure中是否有测试文本的功能?
我看到了像Clojure中是否有测试文本的功能?,clojure,Clojure,我看到了像number?和string?这样的函数 是否有一个函数来测试表单是否为文本 我是指Clojure中的所有文字 这就是我想做的 ;;抽象语法表示 (defrecord VarExp [id]) (defrecord LiteralExp [datum]) (defrecord LambdaExp [ids body]) (defrecord IfExp [pred true-exp false-exp]) (defrecord AppExp [rator rands]) (defn
number?
和string?
这样的函数
是否有一个函数来测试表单是否为文本
我是指Clojure中的所有文字 这就是我想做的 ;;抽象语法表示
(defrecord VarExp [id])
(defrecord LiteralExp [datum])
(defrecord LambdaExp [ids body])
(defrecord IfExp [pred true-exp false-exp])
(defrecord AppExp [rator rands])
(defn parse-expression [datum]
(cond
(symbol? datum) (VarExp. datum)
(literal? datum) (LiteralExp. datum)
(list? datum) (cond
(= (first datum) 'fn) (LambdaExp. (map parse-expression (second datum))
(parse-expression (nth datum 2)))
(= (first datum) 'if) (IfExp.
(parse-expression (second datum))
(parse-expression (nth datum 2))
(parse-expression (last datum)))
:else (AppExp.
(parse-expression (first datum))
(map parse-expression (rest datum))))
:else (throw
(Exception. (str 'parse-expression
": Invalid concrete syntax " datum)))))
我希望在不使用任何独立解析器的情况下将S-exp解析为AST,因为S-exp非常类似于解析树
我目前的解决办法是:
(defn literal? [datum]
(or
(true? datum)
(false? datum)
(string? datum)
(nil? datum)
(symbol? datum)
(number? datum)))
这已经是最实用的了吗
顺便说一句,这是Clojure的语法
字面意义的
:字符串
|数
|性格
|零
|布尔值
|关键词
|象征
|参数名称
;
字符串:“'”(~”“|“\”)*“
编号:'-'?[0-9]+ ('.' [0-9]+)? ([eE]'-'?[0-9]+)
字符:“\”
零:‘零’
布尔值:“真”|“假”
关键词:':'符号
符号:'.|'/'|名称('/'名称)
参数名称:'%1'('1'..'9')('0'..'9')*) 不,Clojure中没有这样的功能
有很多种文字,包括复合集合,如映射、集合、向量、列表等,所以我不确定“文字”是否真的是一个有意义的问题。不,Clojure中没有这样的函数
有很多种文字,包括复合集合,如映射、集合、向量、列表等,因此我不确定“文字”是否真的是一个有意义的问题。文字是编译时的一个概念(即由编译器将文字解析为对应的值/对象),其中as函数是运行时概念(即它们处理运行时可用的值),因此,不存在这样的函数,因为函数无法检查值/对象是否是文字编译的结果。
只有宏才能判断某个内容是否为文本。文本是编译时的概念(即,编译器将文本解析为相应的值/对象),其中as函数是
运行时概念(即它们处理运行时可用的值),因此,不,不可能有这样的函数,因为该函数无法检查值/对象是否是文字编译的结果。
只有宏才能判断某个内容是否为文字。也许它在宏中有用?我指的是Clojure中的所有文字。@Alex Miller我想他指的是屏幕上“文字”标题下的文字。字符串、数字、字符、零、布尔、关键字。也许它在宏中有用?我指的是Clojure中的所有文字。@Alex Miller我想他指的是屏幕上“文字”标题下的文字。字符串、数字、字符、零、布尔、关键字。@noisesmith真的吗?我在这里找到的()。如果我只想检测那些文字呢?我必须使用解析器来解析它吗?请参阅从语法生成AST的详细信息。@luckykevin我意识到我错了并删除了注释,我忘记了clojure在输入方面有两种“literal”的用法forms@A.Webb我已经看过这个工具了。似乎它将评估每个符号。例如,“+”变成了“clojure.core/add”,这绝对不是我想要的,因为我想保持“+”的原样。反正是Thx。@noisesmith真的吗?我在这里找到的()。如果我只想检测那些文字呢?我必须使用解析器来解析它吗?请参阅从语法生成AST的详细信息。@luckykevin我意识到我错了并删除了注释,我忘记了clojure在输入方面有两种“literal”的用法forms@A.Webb我已经看过这个工具了。似乎它将评估每个符号。例如,“+”变成了“clojure.core/add”,这绝对不是我想要的,因为我想保持“+”的原样。无论如何,Thx。实际上,我会说“文字”是读取器中的概念(当将字符串解析为Clojure数据形式时),而不是编译器(将其作为输入)。实际上,我会说“文字”是读取器中的概念(当将字符串解析为Clojure数据形式时),而不是编译器(将其作为输入)。