Re: C interface confusion about char codes, lists and atoms...

Sean Charles <[email protected]>
Newsgroups gmane.comp.gnu.prolog.general
Message-ID <[email protected]>
I found it….

Section 6.2 Types and Modes, in the table…

character	a single character atom 

and from the preceding  table entry:
	
TYPE_list	a list whose the type of each element is TYPE

So I guess it was there after all I just didn't see it. What a surprise.



On 4 Jul 2013, at 09:23, Daniel Diaz <[email protected]> wrote:

> Le 03/07/2013 18:30, emacstheviking a écrit :
>> Can somebody point me to to the docs where it says "single character atoms are characters" please....
> 
> You are right, from the Prolog programmer point of view, a character is an atom of length 1.
> 
> Unfortunately the gprolog doc does not define the syntax of Prolog terms since gprolog conforms to the ISO standard for Prolog (ok I should add it). 
> Lower case letters can be written unquoted (e.g. a, b, ...) orther chars need to be quoted (e.g. '#', 'A', ...).
> 
> Daniel
> 
>> I seem to have missed something basic. I will also read LPN, C&M and Art of Prolog tonight and make sure I take it in that atoms are also characters.
>> 
>> Dammit.
>> :(
>> 
>> 
>> On 3 July 2013 16:26, Daniel Diaz <[email protected]> wrote:
>> Le 03/07/2013 16:44, emacstheviking a écrit :
>>> Hi,
>>> 
>>> I have been experimenting with the foreign interface and managed to confuse myself.
>>> 
>>> Given this foreign declaration:
>>> 
>>> %% :- foreign( foo( +string ), [fct_name( foo )]). %% +string => atom at call site
>>> %% :- foreign( foo( +codes ), [fct_name( foo )]).
>>> 
>>> :- foreign( foo( +codes ), [fct_name( foo )]).
>>> 
>>> and this implementation:
>>> 
>>> // +string :: atom                ==>  char*, works
>>> // +codes  :: character-code list ==>  char*, works as foo("Hello").
>>> // +chars  :: character list      ==>  char*, fails on call foo("HI"), foo([64,65]). Why?
>>> 
>>> PlBool
>>> foo(char* s)
>>> {
>>>   printf("FOO: ==> %s\n", s);
>>>   return PL_TRUE;
>>> }
>>> 
>>> My problem is that when I use "+chars" I can't then say:
>>> 
>>>     foo("Hello")
>>> 
>>> as I get a type_error so please can anybody explain to me what "character list" is and how it looks in a command line session? The flag that controls the interpretation of double-quoted strings is at its default value as I have not altered it but I am aware of its existence and the fact that "" is syntactic sugaring of lists of codes.
>> Hi,
>> 
>> +atom means you pass an atom (e.g. abc) and you get the internal reference of the atom in C (which is an integer)
>> +chars means you pass a list of characters (e.g. [a,b,c]) and you get a NULL terminated string in C, ie. a char * (e.g. "abc")
>> +code means you pass a list of char codes (e.g. [97,98,99] which is the same a "abc" in Prolog) an dyou get the same char * as above.
>> 
>> See http://gprolog.univ-paris1.fr/manual/html_node/gprolog068.html
>> 
>> Daniel
>> 
>> 
>>> 
>>> Thanks.
>>> 
>>> 
>>> -- 
>>> Ce message a été vérifié par MailScanner pour des virus ou des polluriels et rien de suspect n'a été trouvé. 
>>> 
>>> _______________________________________________
>>> Users-prolog mailing list
>>> [email protected]
>>> https://lists.gnu.org/mailman/listinfo/users-prolog
>> 
>> 
>> -- 
>> Ce message a été vérifié par MailScanner pour des virus ou des polluriels et rien de suspect n'a été trouvé.
>> 
>> 
>> -- 
>> Ce message a été vérifié par MailScanner pour des virus ou des polluriels et rien de suspect n'a été trouvé.
> 
> 
> -- 
> Ce message a été vérifié par MailScanner pour des virus ou des polluriels et rien de suspect n'a été trouvé.

_______________________________________________
Users-prolog mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/users-prolog
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.