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