【问题标题】:scheme- sum of values in a list of characters方案 - 字符列表中的值的总和
【发布时间】:2015-12-14 11:39:08
【问题描述】:

我是 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> 论点位置:第二 其他论点。:" 当我尝试其他输入时..

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

【问题讨论】:

  • string->number(string(car ls))
  • 你有searched for that error message吗?这可能是重复的。
  • 我有,但没有发现相同错误帮助我理解它..

标签: list char sum scheme


【解决方案1】:

由于括号,您的函数中有两个错误。第一个是(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 中的函数调用是写成 form

(function arg1 arg2 ... argn)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2015-12-19
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多