users-prolog
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Difference between memberchk/2 and member/2...


From: Daniel Diaz
Subject: Re: Difference between memberchk/2 and member/2...
Date: Tue, 23 Jul 2013 09:11:55 +0400

Le 19 juil. 2013 à 18:37, emacstheviking <address@hidden> a écrit :

> Given this rule:
> 
> is_digit(C) :- memberchk(C, "0123456789").
> 
> which used to use "member",
> 
> and given that I intend to be parsing a source language read from a
> file into a character list, what would be the more correct /
> appropriate one to use and why?
> 
> I know that member() can backtrack and therefore be used to iterate
> over a list but is that useful / relevant in my example rule ?

The difference between member/2 and memberchk/2 is that the former can be used 
both to check and to to generate digits while the later can only be used to 
check. In your case memberchk/2 is the best choice.

In generation mode, member/2 works:

| ?- member(X,"0123456789").     

X = 48 ? ;

X = 49 ? ;

X = 50 ? ;

X = 51 ? ;

X = 52 ? ;

X = 53 ? ;

X = 54 ? ;

X = 55 ? ;

X = 56 ? ;

X = 57

(1 ms) yes

memberchk/2 does not:

| ?- memberchk(X,"0123456789").

X = 48


Daniel

> 
> Thanks,
> Sean.
> 
> _______________________________________________
> Users-prolog mailing list
> address@hidden
> https://lists.gnu.org/mailman/listinfo/users-prolog
> 
> -- 
> Ce message a ete verifie par MailScanner
> pour des virus ou des polluriels et rien de
> suspect n'a ete trouve.
> 


-- 
Ce message a ete verifie par MailScanner
pour des virus ou des polluriels et rien de
suspect n'a ete trouve.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]