gpt4 book ai didi

lisp - Clisp编译错误: "string" is not a real number

转载 作者:太空宇宙 更新时间:2023-11-03 19:02:10 27 4
gpt4 key购买 nike

我是 lisp 的新手,如果这个问题听起来很迂腐,我深表歉意:

我正在尝试为家庭作业项目构建一个 Lisp 程序,该项目使用 1 个函数和递归将一系列罗马数字更改为十进制数字。不允许使用变量、progn、赋值或循环。

我目前的情况是这样的:

(defun tonormal (inputs &optional (state 1) rostr)
(COND
((= state 1) (dolist (x inputs) (print (toroman nil 2 x))))
((= state 2) (COND
((equal (subseq rostr 0 1) "M" ) (+ 1000 (toroman nil 2 (subseq rostr 1))))
((equal (subseq rostr 0 2) "CM") (+ 900 (toroman nil 2 (subseq rostr 2))))
((equal (subseq rostr 0 1) "D" ) (+ 500 (toroman nil 2 (subseq rostr 1))))
((equal (subseq rostr 0 2) "CD") (+ 400 (toroman nil 2 (subseq rostr 2))))
((equal (subseq rostr 0 1) "C" ) (+ 100 (toroman nil 2 (subseq rostr 1))))
((equal (subseq rostr 0 2) "XC") (+ 90 (toroman nil 2 (subseq rostr 2))))
((equal (subseq rostr 0 1) "L" ) (+ 50 (toroman nil 2 (subseq rostr 1))))
((equal (subseq rostr 0 2) "XL") (+ 40 (toroman nil 2 (subseq rostr 2))))
((equal (subseq rostr 0 1) "X" ) (+ 10 (toroman nil 2 (subseq rostr 1))))
((equal (subseq rostr 0 2) "IX") (+ 9 (toroman nil 2 (subseq rostr 2))))
((equal (subseq rostr 0 1) "V" ) (+ 5 (toroman nil 2 (subseq rostr 1))))
((equal (subseq rostr 0 2) "IV") (+ 4 (toroman nil 2 (subseq rostr 2))))
((equal (subseq rostr 0 1) "I" ) (+ 1 (toroman nil 2 (subseq rostr 1))))
((= (length rostr) 0) (values))))))

当我尝试调用该函数时,收到此错误消息:

[191]> (tonormal '("MXXIV" "MMCMXX"))

*** - >=: "MXXIV" is not a real number

为什么会出现这个该死的小错误?如果有人可以提供帮助,将不胜感激。我已经为此工作了几个小时。

最佳答案

我不确定状态变量应该做什么,但它是可选的,默认值为 1,并且由于您没有将不同的值传递给 (tonormal '("MXXIV""MMCMMXX") ),它触发了第一个 cond 子句,这意味着它将“MXXIV”传递给 (toroman ...),这可能需要一个数字输入。

关于lisp - Clisp编译错误: "string" is not a real number,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34009407/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com