我正在尝试查找列表的模式
假设列表按升序排序
这是我的模式功能
(define freq
(lambda (l)
(cond ((null? l)l)
((null? (cdr l))l)
((not(equal? (car l) (car(cdr l))))(freq(cdr(delete l (car l)))))
(else (freq (cdr l)))
)))
(freq '(4 4 4 4 5 7 9 9 9)) => should returns 4 but its returning 9 instead
这是我的解决方案,与Óscar的解决方案类似,但将最长/获胜结果的更新集中在一个位置:
(define (longest-run lst)
(let loop ((result #f)
(cur #f)
(count 0)
(longest 0)
(lst lst))
(cond ((> count longest)
(loop cur cur count count lst))
((null? lst) result)
((eqv? (car lst) cur)
(loop result cur (+ count 1) longest (cdr lst)))
(else
(loop result (car lst) 1 longest (cdr lst))))))
我认为我的解决方案更短,更干净且重复性更低,但是Óscar的解决方案具有将变量更新次数减少的优点:他的解决方案仅在运行结束时更新变量,而我的解决方案在当前长度较长时更新变量比迄今为止所见的最长长度。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句