[We thought this might be of interest to other Ciao users]
------- Start of forwarded message ------- X-Coding-System: nil Return-Path: <mail(a)krauskopf-rainer.de> Date: Wed, 02 Apr 2003 18:58:27 +0200 From: Rainer Krauskopf <mail(a)krauskopf-rainer.de> Subject: functions in Ciao Prolog To: herme(a)clip.dia.fi.upm.es MIME-version: 1.0 X-Priority: 3 (Normal)
Dear Manuel,
I'm interested in Ciao Prolog. You claim that Ciao Prolog does support programming with functions. What does this mean? Please be so kind and let me have some examples:
1. I can define in Prolog "between(+,?,+)" : between(A,A,B) :- A =< B . between(A,X,B) :- A < B , A1 is A + 1 , between(A1,X,B) . I'd prefer to write : between(A,A,B) :- A =< B . between(A,X,B) :- A < B , between(A + 1, X, B) .
2. I can define in Prolog "flin(+,-)" : flin(X,Y) :- Y is 3*X + 5 . I'd prefer to write : flin(X) := 3*X + 5 .
3. I can define in Prolog "fak(+,-)" : fak(0,1). fak(N,Y) :- N > 0 , N1 is N - 1 , fak(N1,Y1), Y is N*Y1 . I'd prefer to write : fak(0) := 1 . fak(N) := N*fak(N - 1) if N > 0 .
4. I can define in Prolog "fib(+,-)" : fib(0,0). fib(1,1). fib(X,Y) :- X > 1 , X2 is X - 2 , X1 is X - 1 , fib(X2,Y2) , fib(X1,Y1) , Y is Y2 + Y1 . I'd prefer to write : fib(0) := 0 . fib(1) := 1 . fib(X) := fib(X - 2) + fib(X - 1) if X > 1 .
5. I can define in Prolog "divides(?,+)" : divides(X,Y) :- between(1,X,Y) , 0 is Y mod X . I can ask the questions : ?- X is 3*4 , fak(3,Y) , fak(Y,Z) , divides(X,Z) . ?- fak(4,Y) , divides(X,Y) . ?- fib(4,X) , Y is 2*4 , fib(Y,Z) , divides(X,Z) . ?- fib(6,Y) , fib(Y,Z) , divides(X,Z) . I'd prefer to formulate : ?- divides( 3*4 , fak(fak(3)) ) . ?- divides( X , fak(4) ) . ?- divides( fib(4) , fib( 2*4 ) ) . ?- divides( X , fib(fib( 6 )) ) .
You see I'd appreciate the availability of the functional notation. What notation is available within Ciao Prolog? Is there a context sensitive help for built in predicates?
Thank you in advance! Best regards R. Krauskopf ------- End of forwarded message -------