【发布时间】:2010-02-02 15:39:35
【问题描述】:
我知道在 Prolog 中你可以做类似的事情
someFunction(List) :-
someOtherFunction(X, List)
doSomethingWith(X)
% and so on
这不会遍历 List 中的每个元素;相反,它将分支到不同的“机器”(通过使用多个线程、在单个线程上回溯、创建并行宇宙或你有什么),为每个可能的值单独执行的 X 导致 someOtherFunction(X, List) 返回 true!
(我不知道它是如何做到的,但这对问题并不重要)
我的问题是:还有哪些其他非确定性编程语言?似乎非确定性是在具有不可变变量的语言中实现多线程的最简单和最合乎逻辑的方法,但我以前从未见过这样做过 - 为什么这种技术没有更受欢迎?
【问题讨论】:
-
是的,这与我的上一个问题非常相似:stackoverflow.com/questions/2174535/… 我问了一个新问题,因为显然我最后一个问题的措辞很糟糕;每个人都开始争论 Prolog 的细节,但我并不真正关心 Prolog。
-
谷歌,主要是帮助。例如:en.wikipedia.org/wiki/Nondeterministic_programming 是我发现的。这有帮助吗?
-
这给出了几 (3) 个示例,但并没有真正解释为什么在大多数函数式语言中不使用非确定性
-
这可能有助于询问当您颠倒条款时会发生什么。即
someFunction(List) :- doSomethingWith(X), someOtherFunction(X, List)做什么?有什么不同吗?应该是吗?如果您真的想了解 Prolog 的实际工作原理,我会推荐 The Reasoned Schemer (mitpress.mit.edu/catalog/item/default.asp?ttype=2&tid=10663)。 -
@Nathan: ...它会做什么?它会给出相同的结果,不是吗?只是性能不同?
标签: multithreading functional-programming prolog non-deterministic