方案 - 字符列表中值的总和

scheme- sum of values in a list of characters

我是 Scheme 的新手,我想弄清楚为什么以下函数不起作用。我想对字符列表的 int 值求和(以便字符 ' 的值1' 是 1 等等)。这是我尝试做的:

(define (func ls sum)
(cond
  ((null? ls)(sum))
  (else(func (cdr ls)(+ sum string->number(string(car ls)))))))

但是当我尝试 运行 时,它是这样的:

(func '() 0)

我得到:“应用程序:不是程序; 期望一个可以应用于参数的过程 给出:0 参数...:[none]”错误。 要么: “违约 预期:数字? 给出:#number> 论点位置:第二 其他论点。:“ 当我尝试其他输入时..

谁能告诉我我做错了什么?

由于括号,您的函数中有两个错误。首先是 (sum) 的使用:这被解释为对无参数函数 sum 的调用。第二种是不带括号的string->number的使用:

(+ sum string->number(string(car ls)))

这被解释为使用三个参数调用函数 +sumstring->number(这是一个函数而不是数字)和 (string(car ls))(这是一个字符串而不是数字)。

这是正确的函数:

(define (func ls sum)
  (cond
    ((null? ls) sum)
    (else (func (cdr ls) (+ sum (string->number (string (car ls))))))))

你应该永远记住,Scheme 中的函数调用写成形式:

(function arg1 arg2 ... argn)