Higher-order functions: Difference between revisions
→{{header|Picat}}: Added subsections
(→{{header|Picat}}: Added subsections) |
|||
Line 3,395:
=={{header|Picat}}==
Here are some different approaches.
<lang Picat>go =>▼
The following variables and functions are assumed to be defined:
▲<lang Picat>go =>
L = 1..10,
L2 = 1..3,
f1(X) = X**2.▼
▲ % map
f2(X,A) = X**A + A**X.▼
%▼
% qsort(List, SortFunction)▼
% returns a sorted list according to the sort function SortFunction▼
%▼
qsort([],_F) = [].▼
qsort([H|T],F) = qsort([E : E in T, call(F,E,H)], F) ▼
++ [H] ++▼
qsort([E : E in T, not call(F,E,H)],F).▼
% sort on length ▼
sortf(F1,F2) => ▼
F1.length < F2.length.</lang>▼
===Using map===
<lang Picat> % ...
println(map(f1,L)),
println(map($f2(3),L)),
println(map(f2,L,map(f1,L)))
In
<lang Picat> %
println([f1(I) : I in L]),
println([[I,J,f2(I,J)] : I in L, J in L2])
===Apply===
▲ % apply
<lang Picat> % ...
println(apply(+,1,2)),
println(apply(f2,10,22))
Here is an example how to sort on length.
<lang Picat> % ...
S = [
"rosetta code",
Line 3,426 ⟶ 3,451:
],
println(map(len,S)),
println(S.qsort(sortf))
▲f1(X) = X**2.
▲f2(X,A) = X**A + A**X.
▲%
▲% qsort(List, SortFunction)
▲% returns a sorted list according to the sort function SortFunction
▲%
▲qsort([],_F) = [].
▲qsort([H|T],F) = qsort([E : E in T, call(F,E,H)], F)
▲ ++ [H] ++
▲ qsort([E : E in T, not call(F,E,H)],F).
▲% sort on length
▲sortf(F1,F2) =>
▲ F1.length < F2.length.</lang>
{{out}}
<pre>[1,4,9,16,25,36,49,64,81,100]
[4,17,54,145,368,945,2530,7073,20412,60049]
|