3 ms·
Probably! -- The any function determines if some element of the input list satisfies the given predicate: any f [] = False any f (x:xt) = f x || any
by mrkeen 3y ago
Probably!
-- The any function determines if some element of the input list satisfies the given predicate:
any f [] = False
any f (x:xt) = f x || any f xt
In the meantime here's a more palatable version of 'any' for the 99% of programmers who are put off by the confusing Haskell:
// Returns whether any elements of this stream match the provided predicate. May not evaluate the predicate on all elements if not necessary for determining the result. If the stream is empty then false is returned and the predicate is not evaluated.
public final boolean anyMatch(Predicate<? super P_OUT> predicate) {
return evaluate(MatchOps.makeRef(predicate, MatchOps.MatchKind.ANY));
}
final <R> R evaluate(TerminalOp<E_OUT, R> terminalOp) {
assert getOutputShape() == terminalOp.inputShape();
if (linkedOrConsumed)
throw new IllegalStateException(MSG_STREAM_LINKED);
linkedOrConsumed = true;
return isParallel()
? terminalOp.evaluateParallel(this, sourceSpliterator(terminalOp.getOpFlags()))
: terminalOp.evaluateSequential(this, sourceSpliterator(terminalOp.getOpFlags()));
}
public static <T> TerminalOp<T, Boolean> makeRef(Predicate<? super T> predicate,
MatchKind matchKind) {
Objects.requireNonNull(predicate);
Objects.requireNonNull(matchKind);
class MatchSink extends BooleanTerminalSink<T> {
MatchSink() {
super(matchKind);
}
@Override
public void accept(T t) {
if (!stop && predicate.test(t) == matchKind.stopOnPredicateMatches) {
stop = true;
value = matchKind.shortCircuitResult;
}
}
}
return new MatchOp<>(StreamShape.REFERENCE, matchKind, MatchSink::new);
}
- mbwgh 3y agoThanks. I believe with the additional null checks, this version is safer to use, too!
- poorlyknit 3y agoThere's no null in Haskell to check for. Go check it out!
- poorlyknit 3y agoThis would be even more palatable if it involved some more design patterns.