scheme-字符列表中值的总和

时间:2015-12-14 11:39:08

标签: list char sum scheme

我是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   参数......:[无]“错误。 要么: “合同违规   预期:数量?   给出:#number>   论点位置:第二   其他论点:“  当我尝试其他输入时..

任何人都可以告诉我,我做错了什么?

1 个答案:

答案 0 :(得分:3)

由于括号,您的功能有两个错误。第一个是(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)