获取错误的方案不是函数

时间:2016-04-29 12:53:12

标签: scheme

,我在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)]

为什么我会收到这些错误?

1 个答案:

答案 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