我将如何在 Racket 中创建已回答的答案与正确答案函数

How would I create a answered answer vs correct answer function in Racket

clicker-results 使用名为 answers 的 ClickerResponse 列表列表。 该函数根据给定的答案以百分比形式生成答题器等级。 Clicker 等级确定如下。

• 如果学生的答案与正确答案相符,学生将获得 2 分

• 如果学生的答案与正确答案不符,学生将获得 1 分

• 如果学生没有提供“NA”的答案,学生将获得 0 分

到目前为止我有什么。

(define (clicker-results grades)
   (lambda (s count)
     (+ count
        (cond
          [(empty? grades) 0]
          [(equal? (first (first grades)) (first (rest (first grades)))) 2]
          [(not (equal? (first (first grades)) (first (rest (first grades))))) 1]
        [else 0]))))

虽然我没有得到输出。

示例:

(clicker-results (list (list 'a 'a))) ⇒ 100
(clicker-results (list (list 'a 'a) (list 'NA 'b) 
(list 'c 'b) (list 'd 'e))) ⇒ 50

我看到您仍在为递归而苦苦挣扎 :( lambda 里面没有任何东西,根本与正确答案无关。您是否看过模板,了解如何构建递归解决方案?

你在哪里调用递归?以及如何将答案从分数转换为百分比?

这更像,注意你必须显式处理 'NA 情况,最好有一个单独的辅助程序来计算百分比:

(define clicker-results
  (lambda (answers)
    (* 100.0 (/ (clicker-points answers) (* 2 (length answers))))))

(define clicker-points
  (lambda (answers)
    (cond [(empty? answers) 0]
          [(equal? (first (first answers)) 'NA)
           (clicker-points (rest answers))]
          [(equal? (first (first answers)) (first (rest (first answers))))
           (+ 2 (clicker-points (rest answers)))]
          [else (+ 1 (clicker-points (rest answers)))])))

结果将是:

(clicker-results (list (list 'a 'a)))
=> 100
(clicker-results (list (list 'a 'a) (list 'NA 'b) (list 'c 'b) (list 'd 'e)))
=> 50