digitalmars.D - Feature Request: The ability to deduce delegate parameters based
- Downs (41/41) Sep 04 2007 -----BEGIN PGP SIGNED MESSAGE-----
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 So I was chatting away happily in #d, when the discussion came upon an algorithm to map an array onto (element, predicate(element)) tuples, then select all tuples that have the same predicate value as the first tuple. This being a task well suited for functional programming, I tried to whip up a snippet in a modified form of the scrapple.tools.ext/iter syntax, and came up with this: ~tszip ~ (T elem) { return pred(elem); } ~ filter ~ ((TupleStruct!(T, typeof(pred(T.init))) elem, typeof(pred(T.init)) *first) { if (!first) { first=new typeof(first); *first=elem.values[1]; return true; } else return elem.values[1]==*first; }~tfix(null)) ~maps!("_.values[0]") My point here being the definition of the delegate that's being passed to filter, specifically (TupleStruct!(T, typeof(pred(T.init))) elem, typeof(pred(T.init)) *first) { } Interestingly, all of this type information could be determined implicitly by the opCat function it's being passed to, shortening the definition to (auto elem, typeof(pred(T.init)) *first) { } This doesn't break any existing code, since it merely expands functionality, not changes it. The only downside I could see is that it might set a precedent wrt. overloading by assignment. Also, the use of such auto delegates would have to be limited to cases where the intended type is unambiguous. But even with those limitations, this form of delegate definition would still be useful for cutting down on type redundancy. What do you think? --downs -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFG3bAfpEPJRr05fBERAqVDAJ9JFz+lB0mBFk3+LBYJ/c+bmqdiNwCfTBJw pmO6Slrq3OntoR94Hzisl4I= =5Rbi -----END PGP SIGNATURE-----
Sep 04 2007