我无法弄清楚这个方案代码请帮忙。计算频率包含两个单独的列表查找列表和池列表。它应该返回一个列表,显示查找列表中的所有内容在池列表中的次数。 我知道我很接近它只是一些小错误,最有可能与递归调用后通过pool-list进行。
(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 '() ))
答案 0 :(得分:2)
好的阅读你的代码似乎你的算法本身就很好。问题要简单得多。
一旦您检查了pool-list
中要恢复looking-for-list
的{{1}}中的第一个元素的pool-list
的所有元素,请查看您的代码。为此,请使用helper
作为pool-list
来呼叫pool-list
。你几乎肯定是指compute-frequency
个参数中定义的那个,但是Scheme取helper
个参数中的一个,因为它是compute-frequency
中的阴影。这意味着在第一次迭代后,pool-list
仅为'()
,因此其他所有内容的频率均为0.
要解决此问题,请进行一些重命名。在将来,尝试记住Scheme变量可以并且将在更大范围内影响变量。而且,尝试使用cond
而不是嵌套的if语句。在Scheme中更具可读性(这是我发现这个问题的方式)