我正在为一种深奥的编程语言做一个解释器,为此我编写了这个程序。但是,它没有提供所需的输出,而是输出
***-EVAL:未定义的函数X
任何人都可以帮助澄清该程序的问题吗?
我已经尝试过搜索该错误,并在此站点上检查类似的问题。
(setq acc 0)
(loop
(setq x (read-char))
(when (x = #\i)(acc(+ acc 1)))
(when (x = #\d)(acc(- acc 1)))
(when (x = #\s)(acc(* acc acc)))
(when (x = #\o)(write(acc)))
(when (x = #\h)(return x))
(when (acc <0 or acc =255)(acc =0)))
输入"iiiso"
应该给出输出9
。
但是,实际输出是
***-EVAL:未定义的函数X
答案 0 :(得分:3)
您确实需要从一本精巧的书开始,例如PCL或ACL。 您将节省很多时间。
Lisp语法不同于C。
在C中,相等性==
是一个前缀 operator ,用作x == 1
。
在Lisp等式谓词=
中,eql
&c是普通的函数。
因此,您需要写(eql x #\i)
。
但是,这只是代码中许多其他问题之一。 您要做需要获得一本教科书。
答案 1 :(得分:1)
这里是一种语言的解释器,它有点像Deadfish,它没有试图变得愚蠢而又聪明,但是却确实变得有点Li而不舍(也许在某种程度上有点烦人的纯粹主义意义)。特别是:
这几乎可以肯定CL:
#\Tab
只是一个半标准字符名称。我不确定这是否正确:
这里:
(defun deadfish (&key (in *standard-input*)
(initial-value 0))
;; Deadfish from a stream
(labels ((dfl (acc results)
(case acc
((-1 256)
(dfl 0 results))
(otherwise
(let ((c (read-char in nil in)))
(if (eql c in)
(values (reverse results) acc)
(ecase c
((#\h) (values (reverse results) acc))
((#\i) (dfl (1+ acc) results))
((#\d) (dfl (1- acc) results))
((#\s) (dfl (* acc acc) results))
((#\o) (dfl acc (cons acc results)))
((#\Newline #\Space #\Tab)
(dfl acc results)))))))))
(dfl initial-value '())))
(defun deadfish/string (string &key
(initial-value 0))
;; Deadfish from a string
(with-input-from-string (in string)
(deadfish :in in :initial-value initial-value)))
和
> (map 'string #'code-char
(deadfish/string
"iisiiiisiiiiiiiioiiiiiiiiiiiiiiiiiiiiiiiiiiiiioiiiiiiiooiiio
dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddo
dddddddddddddddddddddsddoddddddddoiiioddddddoddddddddo"))
"Hello world"
有趣的是,该程序可能比许多实现更正确:
> (deadfish/string "iiissssssssssoh")
(373391848741020043532959754184866588225409776783734007750636931722079040617265251229993688938803977220468765065431475158108727054592160858581351336982809187314191748594262580938807019951956404285571818041046681288797402925517668012340617298396574731619152386723046235125934896058590588284654793540505936202376547807442730582144527058988756251452817793413352141920744623027518729185432862375737063985485319476416926263819972887006907013899256524297198527698749274196276811060702333710356481)
373391848741020043532959754184866588225409776783734007750636931722079040617265251229993688938803977220468765065431475158108727054592160858581351336982809187314191748594262580938807019951956404285571818041046681288797402925517668012340617298396574731619152386723046235125934896058590588284654793540505936202376547807442730582144527058988756251452817793413352141920744623027518729185432862375737063985485319476416926263819972887006907013899256524297198527698749274196276811060702333710356481