Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure中是否有测试文本的功能?_Clojure - Fatal编程技术网

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数据形式时),而不是编译器(将其作为输入)。