相关疑难解决方法(0)

Prolog findall实施

我的任务是在Prolog中实现一个版本的findall而不使用任何Prolog内置函数,除了not和cut - 所以基本上是纯Prolog.

我正在尝试在树中搜索所有直接后代并将结果返回到列表中

parent(a, b).
parent(b, c).
parent(b, d).
parent(e, d).
Run Code Online (Sandbox Code Playgroud)

到目前为止我所拥有的是:

find(X, L) :- find2(X, [], L).
find2(X, Acc, L) :- parent(Y, X), find2(Y, [Y|Acc], L).
find2(_, Acc, Acc).
Run Code Online (Sandbox Code Playgroud)

我输入的时候想要的是:

find(a,X).
Run Code Online (Sandbox Code Playgroud)

将会:

X = [b, c, d]
Run Code Online (Sandbox Code Playgroud)

(顺序不重要)

但是我得到了:

X = [b, c] ;
X = [b, d] ;
X = [b] ;
X = [].
Run Code Online (Sandbox Code Playgroud)

我是Prolog的新手,所以对此有任何帮助都会非常感激.

谢谢

recursion multithreading list prolog prolog-findall

7
推荐指数
1
解决办法
7094
查看次数

多线程...函数式语言?(序言)

当我的朋友开始在学校学习Prolog时,我取笑他学习一种无用的语言.然而,他向我展示了一些我从未知道的东西; 我想知道这种技术的来源.

技术是这样的:

permutation(List) :-
    isAMember(X, List),
    deleteFirstElement(X, List, Substring),
    % and so on
Run Code Online (Sandbox Code Playgroud)

在这段代码中,isAMember(X, List)是一个函数,如果X在,则返回true List.然而,到现在为止X没有被定义为一个变量- 这样的计划将产生一堆新的线程,每一个可能的值X,使isAMember(X, List)真实的,并从那里继续.

这使我们能够以我能想象到的最简单,最优雅的方式创建多线程算法.

所以我的问题是: 这是Prolog特定的,还是所有逻辑和/或功能语言的特征? 另外,我在哪里可以学到更多这样令人惊叹的多线程技术 - 这无疑是编程的未来.

multithreading functional-programming prolog logic-programming

5
推荐指数
1
解决办法
955
查看次数