Future of string lambda functions/string predicate functions

H. S. Teoh hsteoh at quickfur.ath.cx
Wed Aug 14 07:34:52 PDT 2013


On Wed, Aug 14, 2013 at 09:10:37AM +0200, Tyler Jameson Little wrote:
> On Wednesday, 14 August 2013 at 05:44:50 UTC, Brad Anderson wrote:
> >On Wednesday, 14 August 2013 at 02:05:16 UTC, Manu wrote:
> >>Can you give an example where you've actually used a string lambda
> >>before where the predicate is more complex than a basic comparison?
> >>Surely the solution to this problem is to offer a bunch of templates
> >>that perform the most common predicates in place of unary/binaryFun?
> >>
> >>So rather than: func!((a, b) => a < b)(args)
> >>You use: func!binaryLess(args)
> >>
> >>Or something like that?
> >>
> >
> >How about just "less"?  It's what C++ STL uses (std::less,
> >std::greater, std::negate, etc...). In C++, however, you have to
> >do some truly ugly stuff to actually make use of the predefined
> >function objects...bind1st...eww (the new C++11 bind is only
> >marginally better but C++11 does have lambdas now at least).
[...]
> Or imitate bash:
> 
> Binary:
> - gt: a > b
> - ge: a >= b
> - lt: a < b
> - le: a <= b
> - eq: a == b
> - ne: a != b
> 
> Unary:
> - z: (zero) a == 0 (if range, a.empty?)
> - n: (non-zero) a != 0
> 
> Perhaps this is *too* terse?

That's a bit too terse. What about this:

	less		// a < b
	less!(5)	// a < 5
	lessEq		// a <= b
	lessEq!(5)	// a <= 5
	more		// a > b
	more!(5)	// a > 5
	moreEq		// a >= b
	moreEq!(5)	// a >= 5
	equal		// a == b
	equal!(5)	// a == 5
	notEqual	// a != b
	notEqual!(5)	// a != 5


T

-- 
A computer doesn't mind if its programs are put to purposes that don't match their names. -- D. Knuth


More information about the Digitalmars-d mailing list