fastest

Created: 2014-05-19 11:30
Updated: 2017-02-27 12:39
License: epl-1.0

README.md

Fastest

A Clojure library for non-deterministic and parallel branching.

This library contains several macros that take a variadic number of expressions for arguments. The expressions are evaluated in parallel and (at most) one of their resulting values is returned.

Fastest uses future to eagerly schedule tasks. When one of the expressions returns a satisfactory result, the (other) futures are canceled.

Setup

To start, create a Leiningen project and add the following dependency to project.clj:

Clojars Project

Next, load Fastest as follows:

(require '[fastest :as f])

Macros

(f/any expr1 expr2 expr3 ...)

Returns the value of the expression that returns the first result. (f/any) expands to nil.

(f/any* expr1 expr2 expr3 ...)

Waits for all the expressions to be evaluated and returns the value that was last returned. (f/any*) expands to nil.

(f/or expr1 expr2 expr3 ...)

Returns the first truthy value returned by any of the expressions. Or, if that fails, the last falsy value. (f/or) expands to nil.

(f/and expr1 expr2 expr3 ...)

Yields the first falsy value returned by any of the expressions. Or, if that fails, the first truthy value. (f/and) expands to true.

(f/some pred expr1 expr2 expr3 ...)

Yields the first value x returned by any of the expressions such that (pred x) is truthy. If that fails, f/some returns the last value such that (pred x) is falsy. (f/some pred) expands to nil.

Further information

Notice that expessions are not usually terminated forcibly when the futures are canceled. Every expression is responsible for checking (Thread/interrupted) if it wants to abort when its return value is no longer needed. The exception to this rule is when an expression calls certain blocking methods of Java, such as Thread/sleep, which raise an InterruptedException when (Thread/interrupted) holds.

License

Copyright © 2014 Jonas De Vuyst

Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.

Cookies help us deliver our services. By using our services, you agree to our use of cookies Learn more