forget

Joe Armstrong <>
Mon Jun 3 16:22:07 CEST 2002


On Wed, 29 May 2002, C.Reinke wrote:

> > foo(Value) ->
> > 	Value2 = bar(Value),
> > 	Value3 = baz(Value2),
> > 	Value4 = zab(Value3),
> > 	{ok, Value4}.
> 
> DCGs and other preprocessing have been suggested, but
> in contrast to Prolog, Erlang is higher order, so why not:
> 
> do (Value,[])    -> {ok,Value};
> do (Value,[F|Fs]) -> V = F(Value), do(V,Fs).
> 
> foo(Value) ->
>   do (Value,[
>      fun bar/1,
>      fun baz/1,
>      fun zab/1
>   ]).
> 
> A more lightweight syntax for funs would make that a lot nicer, of
> course, and "do" might not be the most suggestive name, but it
> avoids names for intermediates as well as language extensions..
> 
> Btw, why can't variables be passed unbound to functions (that
> would make more complex utilities easy)?

I think you have invented monads AND dataflow variables  :-)

This is *very* difficult to implement :-)

suppose  foo(£X) means create an unbound variable and call foo

then we say

	foo(X) ->
	   abc ! X,
	   def ! X.

Then we send the unbound variable to two *different* processes - imagine
they are on different machines (just to make it more fun).

They now both try to bind X at the same time :-) - one should succeed
the other should fail - and it should work in the presence of errors ...

<< this is what Oz does (see http://www.mozart-oz.org/) >>

/Joe






> 
> Claus
> 
> 




More information about the erlang-questions mailing list