2014-12-25 182 views
2

我有2個列表,其中包含隨機數的元素。例如A = [1,2,4,5]和B = [1,2,3]。結果應該是2 ,我試圖代碼:計算兩個列表中匹配元素的數量

domains 
Numbers1 = integer* 
Numbers2 = integer* 
int_list=integer* 

predicates 
nondeterm prinadl(integer, int_list) 

clauses 
    //here going the code that read number that I've entered, and according to entered numer,programm should do something 
answer(T):- T=5, 
    P = 0, 
    write ("Enter the 1st list"), readterm (int_list, L), 
    write ("Enter the 2nd list"), readterm (int_list, L2), 
    L2 = [H|V], prinadl(H, L), P1 = P + 1, 
    write(L2, P1, V). 

prinadl (X, L):- L=[X|_], !. 
prinadl (X, L):- L=[_|T], prinadl (X, T). 

我與序言全新的。你能說我錯了嗎?我需要的是獲得打印到控制檯的匹配數量。 在此先感謝。

+0

似乎大多是隨機碼...什麼是邏輯your're以下?應該很容易,因爲訪問這兩個列表並添加1,當兩個元素匹配時 – CapelliC

+0

@CapelliC是的,它幾乎是隨機的,我複製了來自不同示例的部分。不知道我應該如何創建兩個嵌套的'foreach' 我的意思是:如何從第一個列表中選擇第一個元素並檢查L2中的所有元素,然後獲取L的第二個元素並檢查L2 – Satevg

+0

處理訪問* both *使用單個遞歸謂詞列表時,應該添加一個計數器,當兩個列表具有相同的頭時,計數器會遞增。不要忘記,當其中一個清單變空時,訪問將會停止。在那裏你可以將計數器初始化爲0. – CapelliC

回答

2

這個答案是基於兩件事情:第一,猜測。第二,if_/3 @false。

讓我們定義 的count_left_while2/4

count_left_while2(P_2,Xs,Ys,N) 計數 在XsYs履行P_2相應的列表項的數目N。從左到右,count_left_while2停在前兩個不滿足P_2的項目。當一個列表爲空時,它也停止,但另一個不是。

:- use_module(library(clpfd)). 

:- meta_predicate count_left_while2(2,?,?,?). 
count_left_while2(P_2,Xs,Ys,N) :- 
    N #>= 0, 
    list_list_countleft_while(Xs,Ys,N,P_2). 

nil_or_cons([]). 
nil_or_cons([_|_]). 

:- meta_predicate list_list_countleft_while(?,?,?,2). 
list_list_countleft_while([],Xs,0,_) :- 
    nil_or_cons(Xs). 
list_list_countleft_while([X|Xs],Ys,N,P_2) :- 
    list_list_prev_countleft_while(Ys,Xs,X,N,P_2). 

:- meta_predicate list_list_prev_countleft_while(?,?,?,?,2). 
list_list_prev_countleft_while([],_,_,0,_). 
list_list_prev_countleft_while([Y|Ys],Xs,X,N,P_2) :- 
    if_(call(P_2,X,Y), 
     (N0 #>= 0, N #= N0+1, list_list_countleft_while(Xs,Ys,N0,P_2)), 
     N = 0). 

讓我們使用它與具體化的長期平等謂詞(=)/3,這樣的組合:

:- count_left_while2(=,[1,2,4,5],[1,2,3],N). 
N = 2. 
+0

@false。很好,我怎麼找到一個合適的否定名?'nonnil_and_noncons_t/2'? – repeat

+0

@false .' other_than_nil_and_cons/2'。I不知道這個名字是否會按照預期讀取數據。 – repeat

+0

'not(nil_or_cons)' – false

相關問題