方案 - 字符列表中值的总和
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)))
这被解释为使用三个参数调用函数 +
: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)
我是 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)))
这被解释为使用三个参数调用函数 +
: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)