Antonio One option is to simply track the current index of your loop (since in your example you are iterating over each item anyways) and do a comparison of the current list element to the one you are searching for.
If you really wanted to use the member$ function you could try slicing the list at point identified by the member$ function. I have included an example of one way to do this, given a search item and a list it returns a list containing the positions the item is located. Apologies if it isn't the most efficient or best practice, I haven't touched Jess in a while, others may be able to provide you better answers. ;; ;; Example of finding duplicate locations of an item in a list ;; (deffunction findMember (?item ?list) "Finds and returns the positions of the specified search item in the specified multifield as a multifield (list)" (return (findMemberImpl ?item ?list 0 (create$))) ) (deffunction findMemberImpl (?item ?list ?offset ?retList) "Recursive implementation that locates the search item then slices the list one position beyond the list. Users should call findMember(item,list)" (bind ?position (member$ ?item ?list)) (if (neq ?position FALSE) then (bind ?offset (+ ?offset ?position)) (bind ?retList (create$ ?retList ?offset)) (findMemberImpl ?item (subseq$ ?list (+ ?offset 1) (length$ ?list)) ?offset ?retList) else (return ?retList) ) ) ;; ;; Test it out ;; (defglobal ?*a* = (create$ aa aa bb cc aa bb)) (printout t "Searching in list " ?*a* crlf) (foreach ?f (union$ ?*a*) (printout t "Found " ?f " at " (findMember ?f ?*a*) crlf) ) ;; ;; End Sample ;; This should yield an output like: Searching in list (aa aa bb cc aa bb) Found bb at (3 6) Found aa at (1 2 4) Found cc at (4) Hope this helps, --jason On Thu, 2007-01-11 at 13:10 +0100, Antonino Lo Bue (gmail) wrote: > Hi everyone, > I've problems with list members position: > > (defglobal ?*a* = (create$ aa aa)) > thus I have the list: (aa aa) > > I want to use member position, but if I write: > > (foreach ?f ?*a* (printout t (member$ ?f ?*a*)crlf )) > > I obtain: > 1 > 1 > > Otherwise I want: > 1 > 2 > > This problem is because member$ function find the index of a element > in list if this element exist in the list, thus if the element is > duplicate in the list member$ function find the first element two > times in the same position. > > How can I obtain the position of an element in the list even if is a > duplicate? > > ------------------------------------------------------------------------ > Antonino Lo Bue > Research Fellow > ICAR-CNR Palermo > Phone: 091-6809256 > Web: http://medialab.pa.icar.cnr.it/Personali/personali.html > Email: [EMAIL PROTECTED] > -------------------------------------------------------------------- To unsubscribe, send the words 'unsubscribe jess-users [EMAIL PROTECTED]' in the BODY of a message to [EMAIL PROTECTED], NOT to the list (use your own address!) List problems? Notify [EMAIL PROTECTED] --------------------------------------------------------------------