prolog-findall

Prolog findall/3

血红的双手。 提交于 2019-12-02 02:06:03
问题 Say I have a predicate pred containing several facts. pred(a, b, c). pred(a, d, f). pred(x, y, z). Can I use findall/3 to get a list of all facts which can be pattern matched? for example, if I have pred(a, _, _) I would like to obtain [pred(a, b, c), pred(a, d, f)] 回答1: Just summing up what @mbratch said in the comment section: Yes, but you have to make sure that you either use named variables or construct a simple helper predicate that does that for you: Named variables: findall(pred(a,X,Y)

Prolog findall Implementation

耗尽温柔 提交于 2019-11-27 09:42:44
I've been tasked to implement a version of findall in Prolog without using any Prolog built-ins except for not and cut - so basically in pure Prolog. I'm trying to search a tree for all direct descendants and return the results in a list parent(a, b). parent(b, c). parent(b, d). parent(e, d). What I have so far is: find(X, L) :- find2(X, [], L). find2(X, Acc, L) :- parent(Y, X), find2(Y, [Y|Acc], L). find2(_, Acc, Acc). What I want to be getting when I enter for example: find(a,X). would be: X = [b, c, d] (Order not important) However instead I am getting: X = [b, c] ; X = [b, d] ; X = [b] ; X