Prolog列表列表包含所有元素

时间:2018-05-26 10:42:03

标签: list prolog head

我有一份清单清单:

decide([[1,2,-3],[-2,3],[6],[4]],K). 

我想按“&#39 ;;'”返回所有可能的解决方案。

规则是首先返回其列表大小为1的值。

然后我想返回其大小大于1的值。

size([],0).
size([_|Xs],L) :- size(Xs,N),L is N+1.

head([],[]).
head([X|_],X).

return_list_members([X|_], X).
return_list_members([_|T], X):-return_list_members(T, X).


decide([], []).
decide([L|Ls], Lit):- size(L, N), N == 1, head(L, Lit).
decide([L|Ls], Lit):- size(Ls, N), N == 0, head(L, Lit), !.
decide([L|Ls], Lit):- decide(Ls, Lit) ,return_list_members(Ls, Lit)

示例应该是什么结果:

? - decide([[1,2,-3],[-2,3],[6],[4]],K).
K = 6 ;
K = 4 ;
K = -2 ;
K = 3 ;
K = -3 ;
K = 2 ;
K = 1.

我的目标是首先返回仅包含一个值的列表。然后逐个返回其他列表中的所有元素。我有代码的表单,只返回列表的第一个元素,因为我有头部调用。我不仅可以返回头部值,还可以返回所有其他值,而不是重复?我试图创建一个函数来返回列表的所有元素。

有什么建议吗?

1 个答案:

答案 0 :(得分:4)

other question为起点,只需插入新要求:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
ndroid:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingBottom="0dp"
android:paddingLeft="0dp"
android:paddingRight="0dp"
android:paddingTop="0dp"
tools:context=".MainActivity" >