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

Daniel Diaz <[email protected]>
Newsgroups gmane.comp.gnu.prolog.general
Message-ID <[email protected]>
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é.

_______________________________________________
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.