PLO-LAB 2

 

Proste programy

Reprezentacja list

 

1)      Definiujemy, że: 0 jest liczbą i jeśli x jest liczbą to s(x) jest także liczbą. Napisać klauzule definiujące taką relację liczba(X). Testujmy: a) Czy s(s(0)) jest liczbą? b) Jakie liczby są?

 

2)      Zdefiniować predykat plus(X, Y, Z), który zwróci w Z sumę argumentów X i Y, wykorzystując z w/w definicji liczb.

 

Reprezentacja list

-         lista pusta []

-         lista niepusta, k-elementowa: [E1,E2,...,Ek]

-         lista nie pusta: [Elem|Lista]

gdzie Elem jest pierwszym elementem listy, a Lista zawiera dalszą część listy

-         lista niepusta: [_|_]

-         np. lista 2-elementowa:

[E1, E2]

            lub       [E1 | [E2]]

            lub       [E1 | [E2 | [] ] ]

            lub       [E1, E2 | [] ]

 

3)      Zdefiniować predykat lista(L), który odnosi sukces jeśli L jest listą według w/w reprezentacji.

 

4)      Zdefiniować predykat dlugosc(L, D), który zwróci w D długość listy L. Używajmy w tej chwili tylko 0 i symbolu s do reprezentowania liczb naturalnych. (Istnieje zbudowany predykat length(L, D).)

 

5)      Zdefiniować następujące predykaty:

-         first(X, L) : X jest pierwszym elementem listy L

-         last(X, L) : X jest ostatnim elementem listy L

-         member(X, L) : X jest elementem listy L

-         append(L1, L2, L) : L jest połączeniem listy L1 i listy L2

-         prefix(P, L) : P jest prefiksem listy L

-         suffix(S, L) : S jest sufiksem listy L

-         sublist(L1, L2) : L1 jest podlistą listy L2

-         podlista(L1, L2) : L1 jest podlistą niekoniecznie spójną listy L2

-         czesc_wspolna(L1, L2, W) : W zawiera elementy wspólne list L1 i L2

-         uzgadnialne(Lista) : wszystkie elementy listy można ze sobą uzgodnić