如何计算球拍中出现的字符串

问题描述 投票:0回答:1

写一个球拍函数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"

我将如何创建主要功能?

scheme lisp racket
1个回答
0
投票

您只需要为每种颜色调用该函数,存储结果并将其与条件比较:

(define (red-vs-blue lst)
  (let ((reds  (calculate lst "red"))
        (blues (calculate lst "blue")))
    (cond ((> reds blues) "red")
          ((< reds blues) "blue")
          (else "tie"))))
© www.soinside.com 2019 - 2024. All rights reserved.