Scheme返回错误类型以申请列表输入

时间:2015-02-09 05:09:15

标签: scheme lisp

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

我的代码如下:

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

为什么会这样?我正在给予输入,即我引用该列表。

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

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

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

1 个答案:

答案 0 :(得分:2)

  1. 您的函数应用程序语法错误。函数应用程序在Scheme中始终是 前缀,即car(lst)应为(car lst)等。
  2. 另外,(pair? 'lst)是错误的,因为你不应该引用这个论点。这将测试符号lst是否是一对,显然总是假的。
  3. 当您想要递归时 - 当您收到空列表时,您需要一个基本案例 - 应该返回0
  4. 把所有这些放在一起,你应该有这个:

    (define (sumlist lst)
      (if (pair? lst)
          (+ (car lst) (sumlist (cdr lst)))
          0))
    

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