0

这是一个家庭作业,所以我不要求代码只是指导。我是 Racket 语言的新手,并且在没有 lambda 的情况下使用 ISL。我不能使用 lambda 或任何其他库。

我正在使用大爆炸。我有一个名为 struct-abc 的结构。在 struct-abc 中,我有一个名为 list-abc 的列表。在 list-abc 里面,我有一个 struct-xyz 的集合。我需要在每个刻度上更新 struct-abc 内的 list-abc 内的所有 struct-xyz 。

这是我到目前为止所拥有的:

; my main struct - struct-abc

    (define-struct struct-abc (list-abc))

; my struct - struct-xyz

    (define-struct struct-xyz (pos1 pos2 pos3 radius))

; my list - list-abc which adds instances of struct-xyz to the list

    (define (list-abc struct-xyz-instance lst)
      (cond
       [(empty? lst) (cons struct-xyz-instance empty)]
       [else (cons struct-xyz-instance lst)]))

使用上面的代码片段,我可以在鼠标事件或键事件上将 struct-xyz 的新实例添加到 list-abc。现在如何在每个滴答时自动更新 list-abc 中的所有 struct-xyz ?

这是我的 bigbang 函数(不包括所有参数):

(define (main rate)
  (big-bang (initial-world rate)
            (on-tick world-after-tick rate)
            (on-draw ...)))

这是我的 world-after-tick 函数,我将参数 world 和 list-abc 传递给辅助函数:

(define (world-after-tick-recursive world)
    (update-world-recursive world (world-list-abc world)))

现在,在这个辅助函数中,我想将第一个 struct-xyz 从 list-abc 传递给另一个辅助函数,该函数更新值并递归地从 list-abc 传递每个结构。如何调用递归函数以及更新值的函数?我无法弄清楚这部分:

(define (update-world-recursive world abc-list abc-rest-list)
  (cond
   [(empty? abc-list) #false] ; If empty end bigbang
   [else
     (update-world world (first abc-list) (rest abc-list))]
; Where and how do I call the update-world-recursive function?


(define (update-world world abc-list) ; This takes the first struct from list
... update pos1 of abc-list
... update pos2 of abc-list)
4

1 回答 1

0

这些名字让我措手不及,我建议将您的主要功能分解为多个级别。每个级别使用提供给它的信息做不同的事情。您可以根据每个任务需要访问的内容来决定哪个级别执行什么操作。就像 molbdnilo 说的那样,地图可以解决你的大部分问题。

于 2017-10-08T21:53:40.800 回答