问题
计算列表中的数字出现次数,它们必须相邻。例如:(a a b b c c a e)
,返回
( (a 2) (b 2) (c 2) (a 1) (e 1) )
。
我试过了,
(define (loop lst)
(let ((i 1) (j 0))
(do ()
[(> j (- (length lst) 2))]
(if (eq? (car lst) (cadr lst))
(set! i (+ i 1))
(display i)
)
(
(set! lst (cdr lst))
(set! j (+ j 1))
)
)
)
)
DrScheme在跑步时抱怨
procedure application: expected procedure, given: #<void>; arguments were: #<void>
如何在if
或do
循环中使用多个语句?
谢谢,
答案 0 :(得分:2)
哦,你想计算跑步长度!你猜怎么着! fold
的另一个问题! :-P
(define (run-lengths lst)
(fold-right (lambda (elem result)
(if (and (pair? result)
(equal? elem (caar result)))
(cons (cons elem (+ (cdar result) 1)) (cdr result))
(cons (cons elem 1) result)))
'() lst))
(我的版本以点对形式返回游程长度,而不是长度为2的列表。)由于您使用的是Racket,因此可以使用foldr
代替fold-right
;这样,您就不需要加载SRFI 1.