RosettaCodeData/Task/Partial-function-application/Logtalk/partial-function-applicatio...

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.