1

我无法弄清楚这个方案代码请帮忙。Compute-frequencies 包含两个独立的列表,查找列表和池列表。它应该返回一个列表,显示查找列表中的所有内容在池列表中的次数。我知道我很接近它只是一些小错误,很可能与通过池列表后的递归调用有关。

(define (compute-frequencies looking-for-list pool-list) 
  (define (helper looking-for-list pool-list current-frequency frequency-list)  ; keeps track of finished list and iterates through both lists
    (if (null? looking-for-list) (reverse frequency-list)                       ; finding the number of times data in looking-for-list are in pool-list
    (if (null? pool-list)
        (helper (cdr looking-for-list) pool-list 0 (cons current-frequency frequency-list))
        (if (equal? (car looking-for-list) (car pool-list))
        (helper looking-for-list (cdr pool-list) (+ 1 current-frequency) frequency-list)
        (helper looking-for-list (cdr pool-list) current-frequency frequency-list)))))

 (helper looking-for-list pool-list 0 '() ))
4

1 回答 1

2

好吧,阅读您的代码,您的算法本身似乎非常好。问题要简单得多。

查看您的代码,一旦您检查了您想要恢复到其原始状态pool-list的第一个元素的所有元素。为此,您使用as调用。您几乎可以肯定是指在参数中定义的那个,但是 Scheme 采用 in的参数,因为它是 in 的影子。这意味着在第一次迭代之后,其他一切的频率都是 0 。looking-for-listpool-listhelperpool-listpool-listcompute-frequencyhelpercompute-frequencypool-list'()

为了解决这个问题,做一些重命名。将来,请记住,Scheme 变量可以并且将在更大范围内隐藏变量。此外,尝试使用cond而不是嵌套的 if 语句。在 Scheme 中更具可读性(这就是我发现这个问题的方式)

于 2012-11-13T05:20:09.983 回答