我是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> 论点位置:第二 其他论点:“ 当我尝试其他输入时..
任何人都可以告诉我,我做错了什么?
答案 0 :(得分:3)
由于括号,您的功能有两个错误。第一个是(sum)
的使用:这被解释为对无参数函数sum
的调用。第二种是使用string->number
而不使用括号:
(+ sum string->number(string(car ls)))
这被解释为使用三个参数调用函数+
:sum
,string->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)