我有一个函数,在其中我同时使用解析整数和提示读取。但是,我需要这些整数之一才能成为浮点数。当我将parse-integer更改为parse-float时,它不再起作用。这是函数:
(defun prompt-for-cat ()
(add-record
(make-cat
(prompt-read "Name")
(prompt-read "Coloring")
(or (parse-integer (prompt-read "Weight") :junk-allowed t) 0)
(or (parse-integer (prompt-read "Experience") :junk-allowed t) 0)
(or (parse-integer (prompt-read "Length") :junk-allowed t) 0))))
这按原样工作,但我需要第一个整数“ Weight”为浮点数。parse-float无法正常工作,我找不到正确的方法来执行此操作。
(let ((weight (progn
(format t "Weight: ")
(read t))))
(if (floatp weight) weight 0))
我想我应该更清楚。我学习Lisp已有2个多星期了,所以我很新。我不明白。我还需要以与在该函数其余部分中使用的相同方式来使用该“提示读取”功能。因此,如果您假设我会知道该怎么做,那是我的错,但我不知道。
看起来可以正常工作。我想可以向我的教授学习它的工作原理。谢谢。
我不知道函数提示读取的工作原理,所以我改用格式。特别是它如何存储输入的值。通常,使用全局变量似乎很糟糕,而且很危险。那就是LET发挥作用的地方。但是对您来说重要的是用READ代替提示读取,后者可以读取和解析浮点数。
请注意,为提高可移植性,需要调用
(finish-output)
,因为可以缓冲输出流。请勿在任何生产代码中使用此代码。如果您使用时
READ
没有非常仔细的控制,则在提示下键入内容的人可以使Lisp做任何事情。这等同于允许进行SQL注入攻击,只是语言标准是有关如何进行攻击的文档。