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