List scheme-字符列表中的值之和
我是Scheme的新手,我正试图弄明白为什么下面的函数不起作用。。我想对字符列表的int值求和(因此字符“1”的值为1,依此类推)。这就是我试图做的:List scheme-字符列表中的值之和,list,char,sum,scheme,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
(define (func ls sum)
(cond
((null? ls)(sum))
(else(func (cdr ls)(+ sum string->number(string(car ls)))))))
但当我试着这样运行它时:
(func '() 0)
我得到:“申请:不是程序;
应为可应用于参数的过程
给定值:0
参数…:[none]”错误。
或:
“违反合同
预期:数字?
给定:#编号>
论点立场:第二
其他论据:
当我尝试其他输入时
谁能告诉我我做错了什么 由于括号,函数中有两个错误。第一个是使用
(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中的函数调用是以以下形式编写的:
string->number(string(car ls))
你有吗?这可能是重复的。我有,但我没有发现有相同的错误帮助我理解它。。
(function arg1 arg2 ... argn)