32 lines
1.0 KiB
Plaintext
32 lines
1.0 KiB
Plaintext
:- object(partial_functions).
|
|
|
|
:- public(show/0).
|
|
|
|
show :-
|
|
% create the partial functions
|
|
create_partial_function(f1, PF1),
|
|
create_partial_function(f2, PF2),
|
|
% apply the partial functions
|
|
Sequence1 = [0,1,2,3],
|
|
call(PF1, Sequence1, PF1Sequence1), output_results(PF1, Sequence1, PF1Sequence1),
|
|
call(PF2, Sequence1, PF2Sequence1), output_results(PF2, Sequence1, PF2Sequence1),
|
|
Sequence2 = [2,4,6,8],
|
|
call(PF1, Sequence2, PF1Sequence2), output_results(PF1, Sequence2, PF1Sequence2),
|
|
call(PF2, Sequence2, PF2Sequence2), output_results(PF2, Sequence2, PF2Sequence2).
|
|
|
|
create_partial_function(Closure, fs(Closure)).
|
|
|
|
output_results(Function, Input, Output) :-
|
|
write(Input), write(' -> '), write(Function), write(' -> '), write(Output), nl.
|
|
|
|
fs(Closure, Arg1, Arg2) :-
|
|
meta::map(Closure, Arg1, Arg2).
|
|
|
|
f1(Value, Double) :-
|
|
Double is 2*Value.
|
|
|
|
f2(Value, Square) :-
|
|
Square is Value*Value.
|
|
|
|
:- end_object.
|