使用累加器连接数字列表
Using accumulator to concatenate a list of numbers
我正在尝试创建一个函数来将整数列表连接成一个 integer/string,
预期值:
(check-expect (concatNumbers (list 1 2 3 4)) 1234)
(check-expect (concatNumbers (list 0 4 3 2 1)) 04321)
我的函数:
(define (concatNumbers alon)
(local
((define (inner list1 acc)
(cond
((empty? list1) acc)
(else
((string-append (number->string (first list1)) acc)
(inner (rest list1) acc))))))
(inner alon "")))
但是有一个我无法理解的错误:
function call: expected a function after the open parenthesis, but received "3"
我试图找到以下值的测试:
(concatNumbers (list 1 5 7 8 9 3))
每个 cond
子句(我猜你使用的是中级学生语言)由两部分组成:
- 一个测试表达式,它要么为真,要么为真,或者
else
总是为真;
- 一个表达式,如果它是测试表达式为真的第一个子句,它将被计算。
那么,看看你的 else
子句:
(cond
...
(else
((string-append (number->string (first list1)) acc)
(inner (rest list1) acc))))
好的,表达式是
((string-append (number->string (first list1)) acc)
(inner (rest list1) acc))
所以,如果这在语言中是合法的(在完整的 Racket 中),它的意思是:
- 评价
(inner (rest list1) acc)
;
- 评估
(string-append (number->string (first list1)) acc)
,在程序中有更好的结果;
- 对 (1) 产生的值调用 (2) 产生的过程。
这看起来不对,是吗?首先,(string-append ... ...)
return 是什么意思?我的猜测是 'not a procedure'.
相反,您可能想使用附加的字符串作为其 acc
参数再次调用 inner
。
(你还必须做一些其他事情才能得到正确答案,但我会保留它,因为它很有趣。)
我正在尝试创建一个函数来将整数列表连接成一个 integer/string, 预期值:
(check-expect (concatNumbers (list 1 2 3 4)) 1234)
(check-expect (concatNumbers (list 0 4 3 2 1)) 04321)
我的函数:
(define (concatNumbers alon)
(local
((define (inner list1 acc)
(cond
((empty? list1) acc)
(else
((string-append (number->string (first list1)) acc)
(inner (rest list1) acc))))))
(inner alon "")))
但是有一个我无法理解的错误:
function call: expected a function after the open parenthesis, but received "3"
我试图找到以下值的测试:
(concatNumbers (list 1 5 7 8 9 3))
每个 cond
子句(我猜你使用的是中级学生语言)由两部分组成:
- 一个测试表达式,它要么为真,要么为真,或者
else
总是为真; - 一个表达式,如果它是测试表达式为真的第一个子句,它将被计算。
那么,看看你的 else
子句:
(cond
...
(else
((string-append (number->string (first list1)) acc)
(inner (rest list1) acc))))
好的,表达式是
((string-append (number->string (first list1)) acc)
(inner (rest list1) acc))
所以,如果这在语言中是合法的(在完整的 Racket 中),它的意思是:
- 评价
(inner (rest list1) acc)
; - 评估
(string-append (number->string (first list1)) acc)
,在程序中有更好的结果; - 对 (1) 产生的值调用 (2) 产生的过程。
这看起来不对,是吗?首先,(string-append ... ...)
return 是什么意思?我的猜测是 'not a procedure'.
相反,您可能想使用附加的字符串作为其 acc
参数再次调用 inner
。
(你还必须做一些其他事情才能得到正确答案,但我会保留它,因为它很有趣。)