这是我最后一道作业题,也难倒了导师。老实说,我不知道该去哪里,并且在学校已经用尽了帮助。我要问的问题:
定义一个过程 test-most-common,它需要一个数字重复、一个数字率以及一个原始的 0 和 1 列表。该程序应首先生成列表原件的重复副本。然后它应该通过平均每个速率元素引入随机误差来模拟每个副本在噪声信道上的传输。最后,它应该检查最常见的值列表是否与原始输入列表匹配。
我已经准备好编写一个包含最常见元素的函数(非常感谢 Oscar 的那个!)所以我真的需要一些帮助来解决这个问题。我知道您想使用随机数并为该随机数设置特定的费率。如果发生错误,我知道您想将 0 更改为 1,将 1 更改为 0。我还准备好编写一个函数,该函数将以给定的重复次数重复原始函数,这就是我到目前为止所拥有的这个问题在这里给出:
(define repeated-list
(lambda (rep org)
(cond
[(equal? rep 0) '()]
[else (cons org (repeated-list (sub1 rep) org))])))
(define noisy-channel
(lambda (rep-org rate)
(cond
[(null? rep-org) '()]
[else (cons (noisy-helper (car rep-org) rate) (noisy-channel (cdr rep-org)
rate))])))
(define noisy-helper
(lambda (rep-org rate)
(cond
[(null? rep-org) '()]
[**(here is where I'm stuck)**])))
(define test-most-common
(lambda (rep rate org)
(equal? (most-common(noisy-channel (repeated-list rep org) rate)) org)))
我标记了我卡住的地方。正是在那一点上,我相信我需要做随机函数和一些数学运算(也许?)才能得到实际翻转位的位置。