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

emacstheviking <[email protected]>
Newsgroups gmane.comp.gnu.prolog.general
Message-ID <CAEiEuUJjGDC8ry9aCzu7V-09RjwwgfNCaGpnQv3dG8NXAevDvQ@mail.gmail.com>
Can somebody point me to to the docs where it says "single character atoms
are characters" please.... 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 <http://www.mailscanner.info/>pour des virus ou des polluriels et rien de suspect n'a été trouvé.
>
> _______________________________________________
> Users-prolog mailing [email protected]://lists.gnu.org/mailman/listinfo/users-prolog
>
>
>
> --
> Ce message a été vérifié par MailScanner <http://www.mailscanner.info/>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.