2017-10-05 13 views
1

Ich habe 4 Produzenten, die verschiedene Attribute haben, wie zum Beispiel der Preis für neue Produkte, die Größe, Kundenpreise. Ich habe 4 Listen definiert, die sie repräsentieren.Aktualisierung der Wert von Artikeln in einer Liste in Netlogo

set att-price ((list p1-pr p2-pr p3-pr p4-pr)), die Preise aller Produkte von 4 Herstellern

set att-size ((list p1-sz p2-sz p3-sz p4-sz)) 



set att-rates ((list p1-rt p2-rt p3-rt p4-rt)) 

Wie die Zeit vergeht, die Preise Updates zu erhalten, so dass ich definiert dies, damit dies geschieht:

set (item 0 att-price) (item 0 att-price) * 0.20; Veränderungen im Preis des Produktes des Herstellers eines

set (item 1 att-price) (item 1 att-price) * 0.08 

set (item 3 att-price) (item 3 att-price) * 0.43 

Aber es hat eine Fehlermeldung, dass „Das ist nicht das, was man kann‚set‘auf“!

Wie kann ich diese Elemente dann aktualisieren? Danke

Antwort

2

Sie verwenden replace-item dafür. Zum Beispiel:

set att-price replace-item 0 att-price (0.2 * item 0 att-price) 

Das heißt, anstatt die Elemente der Liste Einstellung machen wir eine neue Liste mit dem Elemente ersetzt, und dann unsere Liste Variable auf dieses Element zu setzen.

Wenn Sie alle Elemente gleichzeitig ersetzen möchten, können Sie map verwenden. Zum Beispiel sieht es so aus, als ob Sie eine Liste von Preisverhältnissen haben, um die sich Ihre Preise ändern:

let ratios [ 0.2 1.0 0.08 0.43 ] 
set att-price (map [ [ price ratio ] -> price * ratio ] att-price ratios) 
+0

Vielen Dank. Ich habe 'set att-price replace-item 0 (0.2 * item 0 att-price) att-price' verwendet, um 'set (item 0 att-price) (item 0 att-price) * 0.20' zu ersetzen, aber es wurde ein Fehler gefunden dass "replace-item" erwartet, dass diese Eingabe eine Zeichenfolge oder eine Liste ist, aber stattdessen eine Zahl erhält. – user710

+1

@ user710 Der neue Wert kommt zuletzt: https://ccl.northwestern.edu/netlogo/docs/dictionary.html#replace-item – Alan

+0

Vielen Dank Alan. Ja, indem Sie 'set att-price replace-item 0 att-price (0.2 * item 0 att-price)', es funktioniert gut :) – user710

Verwandte Themen