写一个球拍函数red-vs-blue,它消耗列表漫步,并根据遵守以下规则:
•如果漫游中出现的字符串“ red”多于“ blue”,则产生“ red”,
•如果漫游中出现的字符串“ blue”多于“ red”,则产生“ blue”,并且
•如果在漫游中出现相同数量的“红色”和“蓝色”(此为包括不包含任何字符串的列表。
我已经创建了辅助函数:
(define (calculate list color)
(cond
[(empty? list) 0]
[(and (string? (first list))
(string=? (first list) color))
(+ 1 (calculate (rest list) color))]
[else (calculate (rest list) color)]))
示例:
(red-vs-blue (cons "red" (cons "blue" (cons 5/7 (cons "blue" empty)))))
⇒ "blue"
• (red-vs-blue empty) ⇒ "tie"
• (red-vs-blue (cons 3 (cons 1 (cons 4 (cons 1 (cons 5 (cons 9 empty))))))) ⇒ "tie"
• (red-vs-blue (cons "red" (cons "green" empty))) ⇒ "red"
我将如何创建主要功能?
您只需要为每种颜色调用该函数,存储结果并将其与条件比较:
(define (red-vs-blue lst)
(let ((reds (calculate lst "red"))
(blues (calculate lst "blue")))
(cond ((> reds blues) "red")
((< reds blues) "blue")
(else "tie"))))