我試圖編寫一個謂詞將元素數組轉換爲一組元素。爲了做到這一點,我已經創造了SWI-序言以下斷言:序言問題 - 將元素數組轉換爲元素集
sterge(_, [], []).
sterge(A, [A|L], New):-
sterge(A, L, New).
sterge(A, [B|L], [B|New]):-
A \= B,
sterge(A, L, New).
multime(A, New):-
mult(A, [], New).
mult([], A, A).
mult([A|L], [A|T], New):-
sterge(A, L, L1),
mult(L1, T, New).
正如你所看到的,sterge
謂語,接受3個參數。其主要目的是將A
元素的所有外觀刪除到L
列表中,從而生成New
列表,其中不包含任何A
元素。
在這個謂詞的幫助下,我試圖從列表中逐個消除所有元素,包括它們的所有外觀,並將它們添加到包含給定數組元素的單個副本的新列表中這需要轉化爲一組元素。
mult
謂詞需要3個參數。
第一個參數是給定的數組,它必須被轉換成一個集合。
第二個參數是一個緩衝區列表,用於在謂詞執行過程中逐個包含數組的唯一元素。
第三個參數用於返回完整的參數集。
實際上,我希望第三個參數與第二個參數的值統一,當給定數組(第一個參數)爲空([]
)時。
最後,具有兩個參數(給定數組和所需組)的謂詞multime
用mult
謂詞啓動一個調用,併爲其參數使用以下值。對於第一個參數,它使用給定數組,第二個參數爲空列表([]
),對於第三個參數,需要獲取所需的一組元素。
但是,當我爲multime
謂詞發起呼叫時,我總是收到false
結果。你能告訴我我哪裏錯了嗎?
請提供'sterge','mult'和'multime'的一些調用以及實際和預期的結果。 – lesmana 2010-09-09 08:36:58
我測試過'sterge'謂詞,它工作得很好。例如,對於元素「1」和列表「[1,2,1,2,3,4]」,預期的結果應該是「[2,2,3,4]」。如果您啓動呼叫'sterge(1,[1,2,1,2,3,4],[2,2,3,4])',您應該收到'true'值。另一方面,'multime'和'mult'不能正常工作。我的意思是,對於我介紹的每個價值觀,我都會收到「虛假」價值。預期的結果應該是: – Simon 2010-09-09 09:17:17
'multime([1,2,2,3,3,4,4],[1,2,3,4])。' – Simon 2010-09-09 09:31:10