Re: C interface confusion about char codes, lists and atoms...
From:
emacstheviking
Subject:
Re: C interface confusion about char codes, lists and atoms...
Date:
Wed, 3 Jul 2013 17:30:31 +0100
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 <address@hidden> 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.