Maremare 1044 – Fd. Medlem
Postad: 3 okt 2020 11:37

tar bort dubbletter ur lista (Prolog)

Hej,

jag ska definiera ett predikat som tar två argument där ena är en lista och det andra är resultatet av samma lista fasat utan dubbletter

ex.

remove_duplicates([a,b,c,b,d,a,c,d], L).

ska ge L=[a,b,c,d]

och denna uppgift är för omfattande för mig att lösa direkt då jag precis börjat med Prolog och undrar vilka delproblem jag kan bryta ner denna för att sen sätta samman, kan inte tänka så kreativt att jag kommer på en lösning direkt så vill gärna veta hur man kan bryta ner detta så jag lär mig delproblemen och sen kan sätta ihop den.

tips?

Aerius 504 – Fd. Medlem
Postad: 3 okt 2020 12:50

1. Sortera listan.

2. Undersök första elementet i listan.

3. Testa om elementet i listan finns i L,

   3.1 om elementet inte finns i L kopiera det till L,

   3. 2 om elementet finns i L kopiera inte elementet till L,

   3.3 gå vidare till nästa element

4. Gör om steg 3 tills hela listan gåtts igenom.

Maremare 1044 – Fd. Medlem
Postad: 3 okt 2020 12:55
Aerius skrev:

1. Sortera listan.

2. Undersök första elementet i listan.

3. Testa om elementet i listan finns i L,

   3.1 om elementet inte finns i L kopiera det till L,

   3. 2 om elementet finns i L kopiera inte elementet till L,

   3.3 gå vidare till nästa element

4. Gör om steg 3 tills hela listan gåtts igenom.

okej tack för tips! 

glömde tillägga att listan ska printas ut i samma ordning som det kom in dvs inte får sorteras.

men man borde väl kunna göra samma sak då väl? dvs utan punkt 1

Laguna Online 30719
Postad: 3 okt 2020 14:42

Spelat det någon roll vilken man behåller i en dublett? Första eller andra? 

Maremare 1044 – Fd. Medlem
Postad: 4 okt 2020 11:07
Laguna skrev:

Spelat det någon roll vilken man behåller i en dublett? Första eller andra? 

ja för om man tar första element och sen kollar om den finns med i resterande lista å tar bort den om den gör det så kommer ordningen ändras.

jag försöka lägga in ett element från en given lista till en ny lista och sedan lägga in nästa element förutsatt att det inte redan finns i den nya listan men får inte till det 

Laguna Online 30719
Postad: 4 okt 2020 11:14

Ordningen ändras ju hur du än gör. Jag undrade om det står något i uppgiftstexten om det.

T.ex. om du har 1 2 3 2 så kommer det en tvåa efter en trea. Tar du bort den andra tvåan så gör det inte det längre.

Maremare 1044 – Fd. Medlem
Postad: 4 okt 2020 11:22
Laguna skrev:

Ordningen ändras ju hur du än gör. Jag undrade om det står något i uppgiftstexten om det.

T.ex. om du har 1 2 3 2 så kommer det en tvåa efter en trea. Tar du bort den andra tvåan så gör det inte det längre.

okej , jag menar att utfallet ska bli följande

in: [1, 2, 3, 4, 1, 2, 2] ska bli [1, 2, 3, 4]

och inte in: [1, 2, 3, 4, 1, 2, 2]  ska inte blir [3, 4, 1, 2]

uppgiften lyder "Vi vill definiera ett predikat som givet en lista som
representerar en sekvens skapar en annan lista som innehåller
alla element som förekommer i inlistan i samma ordning, men
om ett element har fōrekommit tidigare i listan skall det
inte vara med i den resulterande listan."

Laguna Online 30719
Postad: 4 okt 2020 15:30

OK, då vet jag vad uppgiften är. Hur ser din kod ut hittills? 

Maremare 1044 – Fd. Medlem
Postad: 4 okt 2020 15:34
Laguna skrev:

OK, då vet jag vad uppgiften är. Hur ser din kod ut hittills? 

jag har lyckats få bort dubbletter men då ändras ordningen

remove_duplicates([],[]).

remove_duplicates([H|T], List) :-
member(H,T),
remove_duplicates(T, List).

remove_duplicates([H|T], [H|T1]) :-
\+member(H,T),
remove_duplicates(T, T1).

 

kan ej tänka kretivt för har aldrig kodat innan i Prolog så vet inte hur man ska dela upp problemet i delproblem som jag kan lösa sen sätta ihop allt

Svara
Close