,我在Scheme工作。我正在使用Scheme MIT Interpreter和https://repl.it/languages/scheme来测试我的代码。
第一个问题是
- 在?过程采用元素'el'和列表'lst'。 ; - 它返回一个布尔值。 ; - 当el在lst中时它返回true,否则返回false。 ; - 例子: ; (在?3'(2 5 3)) ;评估为#t ; (在?2'(1(2)5)) ;评估为#f ; - 如果lst不是列表,则会产生错误..
我的代码是
(define lst())
(define el())
(define in? (lambda (el lst)
(if(null? lst)
#f
(if (eq? (car lst el ))
#t
(in? el cdr lst )))
(error "ERROR")))
(in? 3'(2 5 3))
我在下面的MIT口译中遇到错误
程序#[编译程序13(“全局”#x14)#x14#x2620cd4]已被调用3个参数;它只需要2个参数。 ;要继续,请使用选项编号调用RESTART :; (RESTART 1)=>返回read-eval-print level 1。
当我在https://repl.it/languages/scheme
中测试时我收到错误
错误:2不是函数[(anon)]
为什么我会收到这些错误?
答案 0 :(得分:2)
试试这个:
(define in?
(lambda (el lst)
(if (or (null? lst) (pair? lst))
(if (null? lst)
#f
(if (equal? (car lst) el )
#t
(in? el (cdr lst))))
(error "ERROR"))))
通常的提示适用:小心括号,正确缩进代码,使用equal?
进行相等比较,注意测试参数是否为列表的正确方法,并确保了解如何传递参数一个过程以及如何实际调用一个过程。它现在按预期工作:
(in? 1 '(2 5 3))
=> #f
(in? 3 '(2 5 3))
=> #t
(in? 1 5)
=> ERROR