2 votes

Netlogo: conversion d'un reporter en procédure anonyme

Je rencontre des difficultés pour convertir un ancien modèle en Netlogo 6. Plus précisément, j'ai deux reporters qui traitent des listes que je n'arrive pas à faire fonctionner correctement avec la nouvelle syntaxe. Les deux intègrent l'ancienne syntaxe ?2 ?1 utilisée dans V5.0 et en dessous. Je serais reconnaissant de toute aide. Voici le code

to-report util-partial-sums [#lst]                                                                  
  set #lst (fput [0] #lst)  
  report butfirst reduce [lput (?2 + last ?1) ?1] #lst 
end

to-report util-compare-adjacent-pairs-in-list [randnum specieslist]

let post 0
let list1 (butlast specieslist)                                                                      
let list2 (butfirst specieslist)                                                                      

ifelse randnum <= first specieslist [set post 0]                                                     
  [ifelse randnum > last specieslist [set post position (last specieslist) specieslist]              
    [
       (foreach list1 list2 [
          if randnum > ?1 and randnum <= ?2 [set post ((position ? specieslist) + 1)]])              
    ]
  ]
report post
end

2voto

mattsap Points 2976

Les procédures anonymes nécessitent désormais que vous définissiez explicitement les paramètres (en ligne), plutôt que d'utiliser prédéfini 1er/2e.

Cela étant dit :

[lput (?2 + last ?1) ?1]

doit être mappé à

[[x y] -> lput (y + last x) x]

Le même problème se produit dans la boucle for.

Ceci est particulièrement utile : https://ccl.northwestern.edu/netlogo/docs/programming.html#anonymous-procedures

La procédure anonyme prend plus d'une entrée
rien

(foreach xs ys [ [ x y ] -> setx x + y ])

(map [ [ x y ] -> x mod round y ] xs ys)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X