Różnice między wybraną wersją a wersją aktualną.
Poprzednia rewizja po obu stronachPoprzednia wersja | |||
notatki:prolog [2025/05/27 13:33] – administrator | notatki:prolog [2025/05/27 14:56] (aktualna) – administrator | ||
---|---|---|---|
Linia 638: | Linia 638: | ||
Result = [1, 2, 3, 4, 5]. | Result = [1, 2, 3, 4, 5]. | ||
</ | </ | ||
+ | |||
+ | |||
+ | ===== Sortowanie listy metodą wstawiania ===== | ||
+ | |||
+ | Predykat sortujący listę numeryczną rosnąco za pomocą algorytmu sortowania przez wstawianie (*insertion sort*). | ||
+ | |||
+ | Definicja: | ||
+ | |||
+ | <code prolog> | ||
+ | insert_sorted(X, | ||
+ | insert_sorted(X, | ||
+ | X =< H. | ||
+ | insert_sorted(X, | ||
+ | X > H, | ||
+ | insert_sorted(X, | ||
+ | |||
+ | insertion_sort([], | ||
+ | insertion_sort([H|T], | ||
+ | insertion_sort(T, | ||
+ | insert_sorted(H, | ||
+ | </ | ||
+ | |||
+ | Opis działania: | ||
+ | - `insert_sorted/ | ||
+ | - `insertion_sort/ | ||
+ | |||
+ | Przykład użycia: | ||
+ | |||
+ | <code prolog> | ||
+ | ?- insertion_sort([4, | ||
+ | Sorted = [1, 2, 3, 4]. | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Obliczanie długości listy ===== | ||
+ | |||
+ | Predykat `length_list/ | ||
+ | |||
+ | Definicja: | ||
+ | |||
+ | <code prolog> | ||
+ | length_list([], | ||
+ | length_list([_|T], | ||
+ | length_list(T, | ||
+ | N is N1 + 1. | ||
+ | </ | ||
+ | |||
+ | - **[]** – pusta lista ma długość 0. | ||
+ | - **[_|T]** – ignorujemy pierwszy element i rekurencyjnie liczymy długość ogona listy, zwiększając wynik o 1. | ||
+ | |||
+ | Przykład użycia: | ||
+ | |||
+ | <code prolog> | ||
+ | ?- length_list([a, | ||
+ | N = 4. | ||
+ | </ | ||
+ | |||
+ | Alternatywnie, | ||
+ | |||
+ | <code prolog> | ||
+ | ?- length([a, b, c, d], N). | ||
+ | N = 4. | ||
+ | </ | ||
+ | |||
+ | ===== Sumowanie elementów listy ===== | ||
+ | |||
+ | Predykat `sum_list/ | ||
+ | |||
+ | Definicja: | ||
+ | |||
+ | <code prolog> | ||
+ | sum_list([], | ||
+ | sum_list([H|T], | ||
+ | sum_list(T, Rest), | ||
+ | Sum is H + Rest. | ||
+ | </ | ||
+ | |||
+ | - **[]** – suma pustej listy to 0. | ||
+ | - **[H|T]** – dodajemy bieżący element `H` do sumy pozostałych elementów `T`. | ||
+ | |||
+ | Przykład użycia: | ||
+ | |||
+ | <code prolog> | ||
+ | ?- sum_list([1, | ||
+ | S = 10. | ||
+ | </ | ||
+ | |||
+ | Można również użyć wbudowanego predykatu `sum_list/ | ||
+ | |||
+ | <code prolog> | ||
+ | ?- sum_list([1, | ||
+ | S = 10. | ||
+ | </ | ||
+ | |||
+ | ===== Średnia arytmetyczna elementów listy ===== | ||
+ | |||
+ | Predykat `average_list/ | ||
+ | |||
+ | Wymaga dwóch pomocniczych predykatów: | ||
+ | * `sum_list/ | ||
+ | * `length_list/ | ||
+ | |||
+ | Definicja: | ||
+ | |||
+ | <code prolog> | ||
+ | sum_list([], | ||
+ | sum_list([H|T], | ||
+ | sum_list(T, Rest), | ||
+ | Sum is H + Rest. | ||
+ | |||
+ | length_list([], | ||
+ | length_list([_|T], | ||
+ | length_list(T, | ||
+ | N is N1 + 1. | ||
+ | |||
+ | average_list(List, | ||
+ | sum_list(List, | ||
+ | length_list(List, | ||
+ | Length > 0, | ||
+ | Avg is Sum / Length. | ||
+ | </ | ||
+ | |||
+ | Opis działania: | ||
+ | - Najpierw obliczamy sumę elementów listy. | ||
+ | - Następnie obliczamy jej długość. | ||
+ | - Obliczamy średnią jako `Sum / Length`. | ||
+ | |||
+ | Przykład użycia: | ||
+ | |||
+ | <code prolog> | ||
+ | ?- average_list([2, | ||
+ | A = 5.0. | ||
+ | </ | ||
+ | |||
+ | Uwaga: predykat sprawdza, czy długość listy jest większa od zera, aby uniknąć dzielenia przez zero. | ||
+ | |||