

Nondeterministic programming - lfborjas
http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme-Z-H-16.html#node_chap_14

======
motxilo
As a practical use, a while ago I "resolved" the Einstein's Riddle using this
operator: [http://ticsblog.com/2010/12/07/solving-einsteins-riddle-
usin...](http://ticsblog.com/2010/12/07/solving-einsteins-riddle-using-
nondeterministic-computing)

------
yuvadam
Nice, but I'm not sure I get it. There is no such thing as a _concrete_ non-
deterministic operation. How does the expression evaluate? If all the
parameters are evaluated in order, there's nothing non-deterministic about it.

~~~
yogsototh
There is no known real world non-deterministic Turing Machine. We could only
simulate it using a deterministic Turing Machine (like a common computer).

Using this operator make the code really clear (IMHO) and I suppose it is its
purpose.

Furthermore, if one day we discover an hardware able to be a non-deterministic
Turing machine is discovered, the code will work.

[1]: I doubt such an hardware exists. But you could look about quantum
computer for something close to what is a non-deterministic Turing machine.

~~~
szany
Navia Systems is designing nondeterministic hardware.

<http://www.naviasystems.com/>

~~~
kd0amg
Maybe I'm missing something, but their web site appears to discuss
probabilistic procedures, which is not nondeterminism in the Turing machine
sense.

~~~
szany
No you're right. I missed the "preferring those choices that cause the program
to converge meaningfully" part. Sorry. Disregard.

------
gromgull
Isn't this just the prolog-ism of backtracking imported into other languages?
Especially as long you just evaluate the options in order?

~~~
_delirium
The article mentions that it's related, but somewhat simpler because it's
"only" backtracking, versus Prolog's full logic programming:

 _The embedding recalls the continuation strategies used to implement Prolog-
style logic programming, but is sparer because the operator provided is much
like a Scheme boolean operator, does not require special contexts for its use,
and does not rely on linguistic infrastructure such as logic variables and
unification._

------
zwischenzug
I don't understand the point of the solutions - why is a non-deterministic
output of a function better than iterating over a list? If anything, it would
be worse.

------
rincewind
In arc: <http://arclanguage.org/item?id=6669>

------
caioariede
In ruby: <http://www.randomhacks.net/articles/2005/10/11/amb-operator>

~~~
lfborjas
Cool, I was wondering if it could be implemented in ruby; it's a shame that
callcc isn't present anymore in ruby 1.9

~~~
lfborjas
I was wrong, ruby 1.9 has callcc back since 2009, you have to `require
'continuation'` now, though.

------
chrisjsmith
SICP covers this too: [http://mitpress.mit.edu/sicp/full-text/book/book-
Z-H-28.html...](http://mitpress.mit.edu/sicp/full-text/book/book-
Z-H-28.html#%_sec_4.3)

The references are better than the posted link.

I have found a couple of uses for this in the past and deparately tried to
port the examples to C# (unsuccessfully).

~~~
shriphani
I agree. I had to use NDP for solving a few CSPs recently. SICP was a godsend.

