2017-07-08 5 views
1

I habe den folgenden Code, wo ich einen neuen Agenten schlüpfen,Wie bekomme ich die ID-Nummer einer neuen Schildkröte, die gerade erstellt wurde?

to t-of-slowdown [ es-poi ] 
    if we-look > 0 [ 
    set we-look (we-look - 1) 
    if (we-look <= 0) [ 
     if es-poi and (not any? events-here) [ 
     hatch-events 1 [ 
      set color green 
      set size 5 
      set is-poi? true 
      set new-poi true 
      let m [[ end2 ] of cur-link] of myself 
      move-to m ] 
     set events-x ([who] of events-here) 
     show events-x 
     set we-poi-var va-geometric (1/1500) + we-ticks poi 
     set sera-poi false 
     ] 
     set impregna true 
     set color red 
     set seguir true 
     set we-look random-normal 120 20 ;time to watch an event 
     ] 
    ] 
end 

, die in einem Schildkröte Kontext ausgeführt wird (Walker Rasse) A Walker wird durch eine ‚Verbindung‘ (ein weiteres Verfahren, das diese nennt) Bewegen und wenn ein Zähler < 0, ist, generiert dieser Code ein neues Ereignis (Ereigniszucht) und platziert ihn an der gleichen Stelle wie der Walker (cur-link ist der aktuelle Walker-Link). Danach muss der Wanderer die ID-Nummer der neuen Veranstaltung hier

set events-x ([who] of events-here) 

Das Problem bekommen, ist, dass variable events-x[] eine leere Liste zu erhalten. Wenn der Walker das nächste Mal am selben Ereignis vorbeikommt, erhält er die Nummer-ID des Ereignisses.

Etwas muss falsch sein, aber ich kann nicht erraten, was es ist. Ich würde mich sehr freuen, wenn jemand einen Blick darauf werfen und mir Hilfe zeigen könnte.

Grüße

+0

Du hast 'move-to', bevor du' -events-x gesetzt hast ([who ... ') - es sieht so aus, als ob deine neue Event-Turtle bereits vor dem Walker auf' m' verschoben wurde eine Chance, nach irgendwelchen Ereignissen auf seinem Patch zu suchen –

Antwort

2

Sie könnten:

let child-who -1 
hatch-events 1 [ 
    ... 
    set child-who who 
    ... 
] 
set events-x child-who 

Oder:

hatch-events 1 [ 
    ... 
    let child-who who 
    ask myself [ set events-x my-who ] 
    ... 
] 

Beide sind ein bisschen klobig, traurig. Die zweite Methode vermeidet, dass child-who zu einem bedeutungslosen Wert initialisiert werden muss, aber es erfordert die Verwendung von myself, einem Primitiv, das den Leser wahrscheinlich mystifizieren wird.

Sie könnten beiden Probleme vermeiden mit:

let parent self 
hatch-events 1 [ 
    ... 
    let child-who who 
    ask parent [ set events-x child-who ] 
    ... 
] 

(Beachten Sie jedoch, dass die Verwendung, die Zahlen überhaupt, für alles, ist selten die beste und idiomatische Lösung für jedes Problem Es ist fast immer besser ein zu speichern. Verweise auf die Schildkröte selbst.)

+0

Sie haben Recht, es ist besser, nicht die ID des Agenten zu verwenden, aber ich wusste nicht, ob Schlüssel in Tabellen (Erweiterung) Schildkröten sein könnten Der andere Teil, die Variable 'event-x', gehört dem walker breed agent und nicht dem gerade schraffierten Ereignis. Dann könnte ich 'events-x' innerhalb der 'schraffur-ereignisse 1 [...]' Klammern setzen. – pablo

+0

Ich habe meine Antwort überarbeitet. –

+0

Vielen, vielen Dank. Ich möchte keine Zahlen verwenden, aber ich weiß nicht, wie man Schildkröten einzeln als Schlüssel in Tabellen benutzt. Ich habe nach einer Lösung gesucht, um das Turtle-Set in eine Liste zu konvertieren und es in einem foreach-Konstrukt zu verwenden, aber ich würde gerne wissen, ob es einen anderen Ansatz gibt. Ich habe eine neue Frage zu diesem Thema gestellt. – pablo

Verwandte Themen