我正在尝试在Scheme中编写一个反转给定数字的程序。但问题是,虽然我的递归是正确的,但Scheme表示递归调用的参数数量不正确。
此代码有什么问题?为什么我会得到错误参数的错误?
(define (rev revs n)
(cond ( (= n 0) 1)
(else (
(rev ( ( + (* revs 10) (remainder n 10) ) (quotient n 10) ) )
) )))
答案 0 :(得分:2)
你有几个错误的括号,基本情况是错误的(你必须返回累加器)。试试这个:
(define (rev revs n)
(cond ((= n 0) revs)
(else
(rev (+ (* revs 10) (remainder n 10)) (quotient n 10)))))
请记住,在Scheme括号中表示“函数应用程序,如果用()
包围某些内容,解释器将尝试将内部函数应用于函数。在放置()
的位置时要非常非常小心。