Higher Order Function Question

Håkan Stenholm <>
Sat May 25 15:18:11 CEST 2002


 >Thank you Haken,
 >
 >but the issue is not "apply" - I was only using that to experiment
 >-- the issue is "map" or "filter" which, apparently, will only
 >accept {attr, isPk} and not attr:isPk (which I am told is "more
 >elegant" and certainly more efficient).
 >
I think there has been slight missunderstanding here, apply(M,F,A) is 
the old classic version of how to call a fun, modern erlang supports 
funs to be called as F1(A) or M:F2(A) where  F1 is a fun as defined 
previously:
 > Fun = fun(Arg1, Arg2 ....) -> ... end  % anynomouse fun
 > Fun = fun FunctionName/Arity           % local fun in current file
 > Fun = {Module, FunctionName}           % any exported function can be 
used
 >
but it is also possible for M and F2 to be arbitrary atoms i.e. this can 
also be done:

% define this function
my_apply(M,F2,A) -> M:F2(A).
% this can be called as
my_apply(lists,append,[[1,2],[3,4]])
% and result in [1,2,3,4]

But "Fun = lists:append," (or similar construct) is not a legal way to 
define a fun. The F1(A) and M:F2(A) syntax is prefered to the 
apply(M,F,A) syntax because it's more efficent in most cases (see the 
"performance hints" link on the R8B documentation index.html page).

 >map and filter will accept:
 >
 >lists:map(fun(Arg) -> attr:varName(Arg) end,
 >rel:attrList(rel:findNamed(ng,"Member"))).
 >
 >but this is quite ugly looking code (albeit probably more efficient 
 >than {attr, isPk}...
 >
 >>Alex
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: text/enriched
Size: 1482 bytes
Desc: not available
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20020525/ad5fd375/attachment-0001.bin>


More information about the erlang-questions mailing list