最近,我正在学习sicp,但我遇到一个奇怪的问题:
<html> <head> <meta charset="utf-8" /> <script data-require="jquery" data-semver="3.1.1" src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> <script src="add.js"></script> </head> <body> <select id="droplist"> <option>Select</option> <option value="1">One</option> <option value="2">Two</option> <option value="3">Three</option> </select> <form id="boxes"> <input type='hidden' name='eventname' value='$eventname '> </form> </body> </html>
这是我的代码
Error:
remainder: contract violation
expected: integer?
given: '(3 4 5 6)
argument position: 1st
other arguments...:
2
告诉余数预期整数参数 我想我给了一个整数到余数而不是列表。那么有人可以告诉我我的代码有什么问题。我陷入了极大的困境。提前谢谢。
答案 0 :(得分:0)
发生此错误是因为您的过程对未知数量的多个参数进行操作 - 这就是.
在声明过程时的含义,而other
被解释为args列表。它在调用过程时传递正确的args,但是第一次调用递归时,它会失败。
一种解决方案是确保我们始终对多个参数应用该过程,而不是将 list 作为第二个参数传递,这是您的代码现在正在执行的操作,从而导致错误。试试这个:
(define (same-parity sample . other)
(if (null? other)
(cons sample '())
(if (= (remainder sample 2) (remainder (car other) 2))
(cons (car other) (apply same-parity sample (cdr other)))
(apply same-parity sample (cdr other)))))