我是计划中的菜鸟...我正在尝试进行练习,以便检查一个数字是否是回文(我知道如何在c,c ++和java中进行)。但我不断收到此错误" c:模块中的未绑定标识符:c"。我在错误中搜索得很远,是的,它上面有几十个主题,但都是与我的惩罚代码无关的复杂内容。我的问题是,有人可以向我解释这个错误究竟意味着什么,我该如何避免呢?到目前为止我的代码:
#lang racket
(define (palindrome n)
(if (> 10 n) #t
(check n)
)
)
(define (check n)
(if (> n 0)
((= c (modulo n 10))
(= x (+ (* x 10) c))
(= n (/ n 10)))
(checkp )
)
)
(define (checkp k)
(if (= k n) #t
#f)
)
答案 0 :(得分:2)
报告的错误发生在check
程序中。对名为c
和x
的变量的所有引用都将失败,这些变量应该是什么?他们来自哪里?请记住:在方案=
中用于比较两个数字,而非用于分配。
还有其他问题。 check
的最后一行正在调用checkp
,但您忘记传递参数。此外if
表达式中的语法错误,您不能在其中写入两个以上的条件("结果"以及"替代"),如果您需要使用两个以上的条件cond
。
请注意这些括号,不得使用它们对表达式进行分组(它们不像花括号!)。在Scheme中,如果您使用()
包围表达式,则表示函数应用程序,而这不是您想要在check
中执行的操作。
在checkp
过程中,我们遇到了同样的问题:变量n
未绑定。它就像在任何其他编程语言中一样:你必须确保变量来自某处(参数,局部变量,全局定义等),它们可以&# 39; t只是凭空出现。
<强>更新强>
更新后,现在它清楚你想做什么。我很抱歉这样说,但是你甚至不能很好地掌握这门语言的最基本概念。一直以来你需要进行迭代(通常通过递归实现),但这在你的代码中没有反映出来 - 你必须在Sceheme上获得一本好书或教程,以获得正确的基础知识。这就是Java或C中的代码在Scheme中的样子:
(define (check k)
(let loop ((x 0) (n k))
(if (zero? n)
(= k x)
(loop (+ (* 10 x) (remainder n 10)) (quotient n 10)))))
(define (palindrome)
(display "Enter the number: ")
(if (check (read))
(display "The number is a palindrome")
(display "The number is not a palindrome")))
像这样使用:
(palindrome)
Enter the number: 12321
The number is a palindrome