Syntax q's

Ulf Wiger <>
Tue Nov 2 16:42:56 CET 1999


On Tue, 2 Nov 1999, Craig Dickson wrote:


crd>First, in a function head, to bind a record argument to a variable,
crd>and also perform pattern-matching on its fields, you have to say:
crd>
crd>    f(R)
crd>        when ... R#rtype.field1 ..., ... R#rtype.field2 ... ->
crd>
crd>which isn't bad, except that it would be convenient to also bind
crd>those fields to variables at the same time. The first time I wanted
crd>to do this, it seemed intuitively obvious to me that the following
crd>should work, but it doesn't:
crd>
crd>    f(R#rtype{field1 = Var1, field2 = Var2})
crd>        when ... Var1 ..., ... Var2 ... ->

Since OTP R5B (the commercial release), and thus in the upcoming next
release of OSE, you can write:

f(R = #rtype{field1 = Var1, ...}) ->
  ...


crd>My other complaint is that the standard libraries have functions
crd>that take module and function atoms (e.g. apply/3), but which
crd>cannot take funs. For example, I would like to be able to
crd>experiment with timer:tc/3 in the Erlang shell by just declaring a
crd>fun interactively and calling tc like this:
crd>
crd>    F = fun(...) -> ... end.
crd>    timer:tc(F, [args...]).
crd>
crd>But this isn't possible because tc doesn't take a fun. I suppose
crd>this is a historical artifact, since funs are a relatively recent
crd>addition to the language. Still, it would be nice to allow funs to
crd>be used more universally.

I believe that in the next release of OSE, you'll be able to use funs in
more places than today, e.g. in spawn/1.

Perhaps not in timer:tc/1 or apply/1... yet.


/Uffe

Ulf Wiger, Chief Designer AXD 301         <>
Ericsson Telecom AB                          tfn: +46  8 719 81 95
Varuvägen 9, Älvsjö                          mob: +46 70 519 81 95
S-126 25 Stockholm, Sweden                   fax: +46  8 719 43 44




More information about the erlang-questions mailing list