J'ai du mal à évaluer correctement les valeurs entières d'une valeur multiflux. En fin de compte, ce dont j'ai besoin est de faire correspondre un multislot contenant uniquement des entiers et être capable de dire si la "liste" est dans l'ordre croissant.CLIPS: Comment évaluer les valeurs multiflux comme entiers
Ce que j'ai jusqu'à présent:
(defclass status
(is-a USER)
(role concrete)
(pattern-match reactive)
(multislot numbers
(create-accessor write)
(type INTEGER)
(range 1 ?VARIABLE)
(default 1)
)
)
(defrule asc
?st <- (object (is-a status) (numbers $?n))
(test (> (length ?n) 2))
(test (< (first$ ?n) (rest$ ?n)))
=>
(printout t "List " ?n " is ascending" crlf)
)
(make-instance of status (numbers 1 2 3))
Je comprends que probablement ce n'est pas la façon de développer un multislot et remplir les arguments pour (<) mais je ne peux pas sembler trouver la bonne façon. Et même si les arguments développés correctement, il dit encore qu'il exige un argument entier, mais
(first$ ?n)
n'évalue pas à un nombre entier.
Ma question est: Comment puis-je prendre une valeur d'une liste de valeurs et "l'analyser" comme un entier? Deuxièmement, comment puis-je développer ces valeurs pour les rendre arguments de (<) et dire si la liste est dans l'ordre croissant?