2017-10-05 8 views
1

J'ai 4 producteurs qui ont des attributs différents tels que le prix de leur nouveau produit, la taille, les tarifs clients. J'ai défini 4 listes les représentant.mettre à jour la valeur des articles dans une liste dans netlogo

set att-price ((list p1-pr p2-pr p3-pr p4-pr)), les prix de tous les produits de 4 producteurs

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



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

Comme le temps passe, les prix se mises à jour, donc je définis ce pour y arriver:

set (item 0 att-price) (item 0 att-price) * 0.20; les changements dans le prix du produit du producteur un

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

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

Mais il a une erreur en disant que « Ce n'est pas ce que vous pouvez « set » sur »!

Comment puis-je mettre à jour ces éléments alors? Merci

Répondre

2

Vous utilisez replace-item pour cela. Par exemple:

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

C'est, au lieu de définir les éléments de la liste, nous faisons une nouvelle liste avec l'élément remplacé, puis définir notre variable de liste à cet élément. Si vous souhaitez remplacer tous les éléments à la fois, vous pouvez utiliser map. Par exemple, il semble que vous ayez une liste des ratios de prix selon lesquels vos prix changent:

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

Merci. J'ai utilisé 'set att-price replace-item 0 (0.2 * item 0 att-price) att-price' pour remplacer set (item 0 att-price) (item 0 att-price) * 0.20' mais une erreur est survenue disant que "replace-item" s'attendait à ce que cette entrée soit une chaîne ou une liste, mais a obtenu un nombre à la place. – user710

+1

@ user710 La nouvelle valeur vient en dernier: https://ccl.northwestern.edu/netlogo/docs/dictionary.html#replace-item – Alan

+0

Merci beaucoup Alan. Oui en faisant 'set att-price replace-item 0 prix d'att (0.2 * item 0 att-price)', ça marche bien :) – user710