2011-05-12 75 views
-1

我試圖讓我的代碼更加動態。我有以下內容的文件:在Prolog中動態設置參數

a(b1, c1, d1). 
a(b2, c2, d2). 
a(b3, c3, d3). 

當我發現所有b1,我做出這樣的名單:

[b1, b2, b3]. 

當元數的變化在文件中,例如,當a(b1,c1,d1)變成a(b1,c1,d1,e1),我的代碼不起作用。有沒有辦法解決這個問題?我正在使用SWI-Prolog。

start :- 
    consult('file.pl'), 
    solve(L1, L2, L3), 
    list_to_set(L1, X), 
    write(X). 

solve(L1, L2, L3):- 
    findall(First, data(First, _, _), L1), 
    findall(Second, data(_, Second, _), L2), 
    findall(Third, data(_, _, Third), L3). 
+1

可能重複[如何根據序言元數推廣計劃? ](http://stackoverflow.com/questions/5949012/how-to-generalize-program-according-to-arity-in-prolog) – 2011-05-13 08:33:01

回答

0

如果元數的變化,你應該把參數列表中,並使用nth1/3

類似的問題here順便說一句的

0

start:- 
     consult('file.pl'), 
     sampling(Arity), 
     solve(Arity,LL), 
     list_to_set(LL, X), 
     write(X). 

solve(Arity,LL):- 
     length(L,Arity), 
     P =.. [data|L], 
     findall(L1,(
        for(1,N,Arity), 
        nth1(N,L,A), 
        findall(A,P,L1)), 
       LL). 

sampling(Arity) :- 
     see('file.pl'), 
     read(P), 
     sampling(P,Arity), 
     seen. 

sampling(end_of_file,_) :- !,seen,fail. 
sampling(P,Arity) :- 
     functor(P,data,Arity),!. 
sampling(_,Arity) :- 
     read(P), 
     sampling(P,Arity). 
+0

嗨,謝謝你的回答。但我有一個問題。怎麼能 – Tolga 2011-05-12 13:58:44