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