有没有一种方法可以在不使用休息的情况下完成这项工作(我试图把cdr lst放在任何地方,但它给了我一个错误)以及如何删除if条件 - (if(> N 0))因为所有我想要显示做的是输出列表 - (名单NE)替代计划中的其余部分?
(define (count lst)
(if (null? lst) '()
(let ((display (lambda (N E)
(if (> N 0) (list N E) (list N E)))))
(let loop ((rest (cdr lst))
(E (car lst))
(N 1))
(cond ((null? rest)
(list (display N E)))
((eq? E (car rest))
(loop (cdr rest) E (+ N 1)))
(else
(cons (display N E) (loop (cdr rest) (car rest) 1))))))))
注意:由于'display'是内置函数(打印值),因此将该名称用于其他目的似乎很奇怪。 – soegaard