develooper Front page | perl.perl6.language | Postings from March 2005

Currying positionals

Thread Next
From:
Yuval Kogman
Date:
March 23, 2005 07:44
Subject:
Currying positionals
Message ID:
20050323154352.GC12121@woobling.org
Hola... I've spend some time these last few days slowly getting
currying to work in pugs.

L<S06/Currying> states: "takes a series of named arguments"

The way binding is implemented in pugs does not seem to require
limiting that usage case. We have 2 functions, that operate on a
subroutine (which knows it's params):

	bind some params
	finalize bindings

bind some params will return a derived subroutine, with some params
prebound. assuming does just this.

finalize bindings will bind defaults to optionals, and check that we
have enough invocants and requireds bound, and return a derived
subroutine, with all params bound.

This is passed to the code that applies the sub.

The algorithmic approach to binding some params:

	bind invocants

	bind named parameters, and keep leftover pairs for %_

	treat nonpairs as positionals, and bind them sequentially. Left
	over nonpairs get put in @_

	if we have slurpy params, they act as %_ and @_.

	package a sub with the bindings, and the unbound params, and
	return it.

and, well... that's it.

This has some funny properties, like:

	foo ($x) { ... }

	foo(x => 1, x => 2); # yields $x = 1, %_<x> = 2

	foo(1, x => 2); # $x = 2, @_[0] = 1

	(&foo.assuming(1))(x => 2); # $x = 1, %_<x> = 1

Are these bugs? I could live with them, but they are a bit
perl5-ish.

I think we need a little more guidance, as the exact semantics of
currying are not that well defined.

-- 
 ()  Yuval Kogman <nothingmuch@woobling.org> 0xEBD27418  perl hacker &
 /\  kung foo master: *shu*rik*en*sh*u*rik*en*s*hur*i*ke*n*: neeyah!!!!



Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About