有沒有一種方法可以在不使用休息的情況下完成這項工作(我試圖把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