假设(list 'win 'loss 'win 'win 'win 'loss 'win 'win)
并使用累积递归产生最长的胜利,即3。我做的是如下:
(define (fun list)
(local
[(define (helper los accu1 accu2)
(cond
[(empty? los) (length accu2)]
[else
(cond
[(equal? (first los) 'loss)
(helper (rest los) 0 accu2)]
[else
(helper (rest los) 0 (cons (first los) accu2))])]))]
(helper list empty empty)))
问题是当我在列表中丢失时我不知道该怎么做,我的功能只计算所有的胜利而不是最长的win.someone帮助请:)。
答案 0 :(得分:1)
这可能是你想要的:
(define (fun lst)
(define (helper lst current longest)
(cond
[(empty? lst) (max current longest)]
[(equal? (first lst) 'win) (helper (rest lst) (add1 current) longest)]
[else (helper (rest lst) 0 (max current longest))]))
(helper lst 0 0))
然后
> (fun (list 'win 'loss 'win 'win 'win 'loss 'win 'win))
3
重点是您需要 2 变量;一个用于当前连续'win
符号的数量,一个用于以前最高连续数字。没有必要创建中间列表,计数器就足够了。