在Racket中写入(列出'test和)会引发错误

时间:2018-05-24 20:48:01

标签: racket

就像标题所说这个列表会抛出错误

and: bad syntax in: and

但是如何编写它,在该列表中需要

最佳

2 个答案:

答案 0 :(得分:0)

构建列表时,需要引用每个元素。

Welcome to Racket v6.12.
> (list 'test 'and)
'(test and)

答案 1 :(得分:0)

除了在s-expr的开头,你不能使用and,因为它似乎是一个保留字。

除此之外,在其他位置,您只能将其用于quote,否则会出现错误的语法错误。

让它出现在列表末尾的唯一可能性 - 因此 - 是:

`(test ,'and)
;; '(test and)

此外,Racket在评估之前进行语法检查(检查变量是否绑定)。 (而不是像Common Lisp那样评估表达式时)。

(if '() whatever 3) ;; `whatever` being a variable not defined before.
;; common-lisp: 3
;; racket:  whatever: unbound identifier in module in: whatever

在Common Lisp中,由于它是一个Lisp-2(函数和变量之间的不同命名空间),你甚至可以创建/保留一个名为and的变量:

;; CL: a variable with the name 'and'
(defvar and 3)
(list 1 and)
;; => (1 3)

但是,在Common Lisp中,不允许重新定义函数and

;; CL: redefine function 'and' - doesn't work:
(defun and (&rest args) (apply #'or args))
;; *** - DEFUN/DEFMACRO: AND is a special operator and may not be redefined.

在Racket中,不可能将某事物绑定到像and这样的保留字。

因此,由于Racket是Lisp-1,因此不允许对and进行任何重新定义(既不作为变量名也不作为函数名),并且因为在评估s-expr之前,Racket会对绑定变量进行语法检查 - 无论是and / quote,还是在没有' / dictionary = gensim.corpora.Dictionary(totalvocab_lemmatized) dictionary.compactify() corpus = [dictionary.doc2bow(text) for text in totalvocab_lemmatized] ###tfidf model tfidf = gensim.models.TfidfModel(corpus, normalize = True) corpus_tfidf = tfidf[corpus] ###LSI model lsi = gensim.models.LsiModel(corpus_tfidf, id2word=dictionary, num_topics=300) vectors =[] for n in lemmatized[:100]: vec_bow = dictionary.doc2bow(n) vec_lsi = lsi[vec_bow] print(len(vec_lsi)) 的情况下,不能在S-expression开头的任何其他位置使用特殊形式/宏或函数kubectl run eureka-server --image=eureka-server-image --port=8761 kubectl expose deployment eureka-server --type NodePort:31000