For Programmers: Free Programming Magazines  


Home > Archive > Prolog > March 2008 > Prolog syntax









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author Prolog syntax
myname

2008-03-23, 7:18 pm

Hello,

there are two elements of Prolog syntax that I do not understand:

a) =.. and []

What are "=.." and "[]" used for here ?

vp(vt,VS,Form) :-
mappend(V,SS,VS),
word(vt,V,S,Form),
member(Type,S),
Type =.. [TYPE],
Cat =.. [TYPE,SS],
Cat.

2) Var-Var

What does "G0-G" (and others) mean in this example ?

vp(Vform,G0-G) -->
v(obj_equi,Vform),
np(G0-G1),
vp(inf,G1-G).

Thanks for your help !


Martin Riener

2008-03-23, 7:18 pm

myname wrote:
> Hello,
>
> there are two elements of Prolog syntax that I do not understand:
>
> a) =.. and []
>
> What are "=.." and "[]" used for here ?
>
> vp(vt,VS,Form) :-
> mappend(V,SS,VS),
> word(vt,V,S,Form),
> member(Type,S),
> Type =.. [TYPE],
> Cat =.. [TYPE,SS],
> Cat.
>
> 2) Var-Var
>
> What does "G0-G" (and others) mean in this example ?
>
> vp(Vform,G0-G) -->
> v(obj_equi,Vform),
> np(G0-G1),
> vp(inf,G1-G).
>
> Thanks for your help !
>
>


*)
[] is the notation for lists, so [TYPE] is a list of length one
containing only the variable TYPE.

the predicate append relates two lists to the concatenation of those, so
the query (copy & paste from swi prompt):

?- append([a,b],X,[a,b,c]).

finds X as the list containing only c:

X = [c] ;


*)
=.. decomposes a term into a list with its first element the predicate
name followed by the predicate's arguments.

you can also try this on the commandline:

?- pred(p1,p2,X,p4) =.. List.

List = [pred, p1, p2, X, p4] ;

it also works in the reverse way:
?- P =.. [pred, p1, p2, X, p4] .

P = pred(p1, p2, X, p4) ;

in your example TYPE contains the predicate name to be called, so Cat
becomes the predicate starting with TYPE and a single parameter SS, in
the last line "Cat.", the just built predicate is called.


*)
- is an infix defined function symbol and originally used to build
arithmetic expressions (calculation takes place via the "is" predicate).
if you don't use "is", you can build expressions of any content:

?- X=5-(3+1).

X = 5- (3+1) ;

works as well as

?- X = a - b.

X = a-b ;

so writing G0-G could also be written as pair(G0, G) to denote a pair of
variables, but the - is often used to make a predicate more readable (by
removing brackets).


i hope it's clearer now, but i'm a student and far behind the regular
posters here, so corrections and feedback are always welcome :)

greetings Martin
myname

2008-03-24, 8:10 am


"Martin Riener" <martin.riener@gmail.com> a écrit dans le message de news:
47e6d280$0$11610$3b214f66@tunews.univie.ac.at...¨

[snip]

Perfect ! Thanks a lot !


Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com