  Pull-tabbing is an evaluation technique for functional logic programs which
computes all non-deterministic results in a single graph structure. Pull-tab
steps are local graph transformations to move non-deterministic choices towards
the root of an expression. Pull-tabbing is independent of a search strategy so
that different strategies (depth-first, breadth-first, parallel) can be used to
extract the results of a computation. It has been used to compile functional
logic languages into imperative or purely functional target languages. Pull-tab
steps might duplicate choices in case of shared subexpressions. This could
result in a dramatic increase of execution time compared to a backtracking
implementation. In this paper we propose a refinement which avoids this
efficiency problem while keeping all the good properties of pull-tabbing. We
evaluate a first implementation of this improved technique in the Julia
programming language.
