2017-10-07 27 views
0

這是一項家庭作業,所以我不要求代碼只是指導。 我是新來的球拍語言和使用沒有拉姆達的ISL。 我不能使用lambda或任何其他庫。如何更新球拍(宇宙)中的另一個結構內的結構列表

我正在使用bigbang。我有一個struct struct-abc。在struct-abc裏面,我有一個名爲list-abc的列表。在list-abc裏面,我有一個struct-xyz的集合。我需要更新每個tick中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)])) 

與上面的代碼片段,我能添加結構-XYZ的新實例列出abc的鼠標事件或按鍵事件。現在如何在每次打勾時自動更新list-abc中的所有struct-xyz?

這裏是我的BIGBANG功能(不包括所有參數):

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

這裏是我的世界後,蜱功能,我傳遞參數的世界和列表農行的輔助功能:

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

現在,在這個幫助函數中,我想將list-abc中的第一個struct-xyz傳遞給另一個幫助函數,該函數更新值並遞歸傳遞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) 
+0

您是否瞭解過「地圖」? – molbdnilo

回答

0

這些名字讓我無法控制,我會建議您將主要功能分解爲多個層次。每個級別都與提供給它的信息做了不同的事情。您可以根據每個任務需要訪問哪個級別來決定哪個級別。像molbdnilo說,地圖將解決您的問題的一個很大的部分。

相關問題