关于Lisp:计划返回错误的类型以申请列表输入

Scheme returning wrong type to apply for list input

我正在尝试编写一个程序,该程序将在列表中添加数字。但是,当我将输入作为列表给出时,Scheme不会给我输出。

我的代码如下:

1
2
(define (sumlist lst)
    (cond ( (pair? lst) (+ (car lst) (sumlist(cdr lst))) )))

为什么会这样?我正在正确输入信息,即我在引用列表。

我提供的输入如下:
(sumlist '(1 2 3))

编辑:
我稍微改变了这个问题。该列表未在pair? 'lst中引用,这就是为什么我遇到错误的原因。
现在,我没有收到任何错误消息。但是,我也没有任何输出。

EDIT2:
我未引用pair? lst中的列表。但是,现在它给了我以下错误:arg2中的类型错误#
我已经相应地更新了代码。


  • 您的函数应用程序语法错误。功能应用程序始终是Scheme中的前缀,即car(lst)应该为(car lst)等。
  • 同样,(pair? 'lst)是错误的,因为您不应该引用该参数。这将测试符号lst是否为一对,这显然总是错误的。
  • 当您不想递归时(当您收到空列表时),您需要一个基本情况,该情况应返回0
  • 将所有这些放在一起,您应该具有以下内容:

    1
    2
    3
    4
    (define (sumlist lst)
      (if (pair? lst)
          (+ (car lst) (sumlist (cdr lst)))
          0))

    (我也将cond更改为if,因为在这种情况下不需要cond。)