模块错误中的未绑定标识符(回文数)

时间:2014-12-15 22:35:56

标签: numbers scheme racket palindrome

我是计划中的菜鸟...我正在尝试进行练习,以便检查一个数字是否是回文(我知道如何在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)
  )

1 个答案:

答案 0 :(得分:2)

报告的错误发生在check程序中。对名为cx的变量的所有引用都将失败,这些变量应该是什么?他们来自哪里?请记住:在方案=中用于比较两个数字,而非用于分配。

还有其他问题。 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