List Prolog创建一个列表
我试图根据事实创建一个列表:List Prolog创建一个列表,list,prolog,List,Prolog,我试图根据事实创建一个列表: mother(jane,jerry). mother(susan,riche). mother(helen,kuyt). 我想将母亲的名字转换成一个包含许多元素的列表,如: momlist([jane,susan],2). momlist([jane,susan,helen],3). momlist([jane],1). 我试图通过以下方式创建此功能: momlist(X,Number):- mom(X,_), NewNum is Number-1, NewNu
mother(jane,jerry).
mother(susan,riche).
mother(helen,kuyt).
我想将母亲的名字转换成一个包含许多元素的列表,如:
momlist([jane,susan],2).
momlist([jane,susan,helen],3).
momlist([jane],1).
我试图通过以下方式创建此功能:
momlist(X,Number):- mom(X,_),
NewNum is Number-1,
NewNum > 0,
write(x),
momlist(X,NewNum).
它只写了妈妈名字的倍数
我怎样才能列出这些事实
致以最诚挚的问候和感谢。给您
mother(jane,jerry).
mother(susan,riche).
mother(helen,kuyt).
mother(govno,mocha).
mother(ponos,albinos).
momlist( X, L ) :-
length( X, L ),
gen_mum( X ),
is_set( X ).
gen_mum( [] ).
gen_mum( [X|Xs] ) :-
mother( X, _ ),
gen_mum( Xs ).
所以
及
这就是你想要的吗?关于公认的答案,有几个小问题:
momlist(X,L):-
setof(M, C^mother(M,C), AllMoms),
perm(L, AllMoms, X).
perm(0, _, []):- !.
perm(N, From, [H|T]):-
select(H, From, NewFrom),
NewN is N-1,
perm(NewN, NewFrom, T).
此外,如果您不需要[jane,helen]以及[helen,jane]等,则可以使用subset而不是perm:
subset(0,_,[]):- !.
subset(N, [M|TM], [M|T]):-
NewN is N-1,
subset(NewN, TM, T).
subset(N, [_|TM], L):-
subset(N, TM, L).
对不起,我真的不明白你在问什么。首先,
mom
的含义是什么?通常作为一个母亲是两个实体(母亲和孩子)之间的关系,第三个名字是什么?第二个困惑点:你称之为momlist
,我称之为length
,除非我遗漏了什么。或者你想要一种收集所有妈妈的方法吗?(在这种情况下,为什么要用length这个词来搅浑水呢)什么是,突然间,directorList
?我很抱歉,我更正了..是的,我想收集列表中的所有妈妈..但是有一个数字限制..例如,如果目标是momlist(X,2)。它将首先给出:[jane,susan]在[jane,helen]之后在[susan,helen]之后在[susan,jane]之后在[helen,jane]之后在[helen,jane]之后在[helen,susan]之后
momlist(X,L):-
setof(M, C^mother(M,C), AllMoms),
perm(L, AllMoms, X).
perm(0, _, []):- !.
perm(N, From, [H|T]):-
select(H, From, NewFrom),
NewN is N-1,
perm(NewN, NewFrom, T).
subset(0,_,[]):- !.
subset(N, [M|TM], [M|T]):-
NewN is N-1,
subset(NewN, TM, T).
subset(N, [_|TM], L):-
subset(N, TM, L).