(defun costam4 (w1 w2 w3) (definiujemy funkcje o nazwie costam4 z 3 zmiennymi w1 w2 w3) (let (( i 0 )) (ustawiamy dla zmiennej i wartość 0) (do (( a w2 (incf a)) (rozpoczynamy pętlę, zwiększamy wartość a za każdym razem wykonania pętli o 1) a to jest wartość w2 ) ((> a w3) i) (sprawdzamy czy wartośca (a u nas W2) jest większa od w3 (if (= (rem a w1) 0) (incf i))) (sprawdzamy czy reszta z dzielenia jest równa 0 jeśli tak zwiększamy i ) ) ) PROGRAM za każdym wykonaniem pętli zwiększa wartość o 1 dla zmiennej W2, następnie dzieli ją przez 5 jeśli reszta z dzielenia jest 0 zwiększa i o 1. Program wykonuje się dopóki nasza Wartość W2 nie będzie większa niż W3 Dla wartości (costam4 5 25 90) jest wynik 14 PONIEWAŻ reszta z dzielenia 5/25 = 0 (w naszym programie i+1) PONIEWAŻ reszta z dzielenia 5/26 = 1 (w naszym programie i+0) PONIEWAŻ reszta z dzielenia 5/27 = 2 (w naszym programie i+0) PONIEWAŻ reszta z dzielenia 5/28 = 3 (w naszym programie i+0) PONIEWAŻ reszta z dzielenia 5/29 = 4 (w naszym programie i+0) PONIEWAŻ reszta z dzielenia 5/30 = 0 (w naszym programie i+1) PONIEWAŻ reszta z dzielenia 5/31 = 1 (w naszym programie i+0) PONIEWAŻ reszta z dzielenia 5/32 = 2 (w naszym programie i+0) PONIEWAŻ reszta z dzielenia 5/33 = 3 (w naszym programie i+0) PONIEWAŻ reszta z dzielenia 5/34 = 4 (w naszym programie i+0) PONIEWAŻ reszta z dzielenia 5/35 = 0 (w naszym programie i+1) PONIEWAŻ reszta z dzielenia 5/36 = 1 (w naszym programie i+0) PONIEWAŻ reszta z dzielenia 5/37 = 2 (w naszym programie i+0) PONIEWAŻ reszta z dzielenia 5/38 = 3 (w naszym programie i+0) PONIEWAŻ reszta z dzielenia 5/39 = 4 (w naszym programie i+0) PONIEWAŻ reszta z dzielenia 5/40 = 0 (w naszym programie i+1) PONIEWAŻ reszta z dzielenia 5/41 = 1 (w naszym programie i+0) i tak aż do osatniego PONIEWAŻ reszta z dzielenia 5/90 = 0 (w naszym programie i+1) (WARTOŚĆ JEST RÓWNA ALE NIE WIĘKSZA OD W3) (costam4 1 2 3) (defun costam2 (w1 w2 w3) (definicja funkcji costam z 3 wartościami) (let ((i 0)) (przypisujemy dla i wartość 0) (do ((a w1 (incf a)) (rozpoczynamy pętle a to jest wartosć w1, za każdym razem gdy wywołamy pętle zwiększamy a o 1 ) ((>a w2) i) (jeśli a jest większe od w2 zwracamy i) (if (= (mod a w3) 0) (incf i))) (jeśli a jest podzielne przez w3 z resztą zerą zwraca 0 jeśli nie zwiększa i o 1 ) ) Dla (costam2 2 20 5) wynikiem będzie 4 PONIEWAŻ SPRAWDZAMY czy a (u nas 2) jest większe od 20 jeśli tak to dzielimy 2/5 = dzielenie z resztą 0 jeśli nie zwiększa nasze A o 1 PONIEWAŻ SPRAWDZAMY czy a (u nas 3) jest większe od 20 jeśli tak to dzielimy 3/5 = dzielenie z resztą 0 jeśli nie zwiększa nasze A o 1 PONIEWAŻ SPRAWDZAMY czy a (u nas 4) jest większe od 20 jeśli tak to dzielimy 4/5 = dzielenie z resztą 0 jeśli nie zwiększa nasze A o 1 PONIEWAŻ SPRAWDZAMY czy a (u nas 5) jest większe od 20 jeśli tak to dzielimy 5/5 = dzielenie z resztą 0 jeśli nie zwiększa nasze A o 1 jeśli tak zwiększa i o 1 PONIEWAŻ SPRAWDZAMY czy a (u nas 6) jest większe od 20 jeśli tak to dzielimy 6/5 = dzielenie z resztą 0 jeśli nie zwiększa nasze A o 1 PONIEWAŻ SPRAWDZAMY czy a (u nas 7) jest większe od 20 jeśli tak to dzielimy 7/5 = dzielenie z resztą 0 jeśli nie zwiększa nasze A o 1 PONIEWAŻ SPRAWDZAMY czy a (u nas 8) jest większe od 20 jeśli tak to dzielimy 8/5 = dzielenie z resztą 0 jeśli nie zwiększa nasze A o 1 PONIEWAŻ SPRAWDZAMY czy a (u nas 9) jest większe od 20 jeśli tak to dzielimy 9/5 = dzielenie z resztą 0 jeśli nie zwiększa nasze A o 1 PONIEWAŻ SPRAWDZAMY czy a (u nas 10) jest większe od 20 jeśli tak to dzielimy 10/5 = dzielenie z resztą 0 jeśli nie zwiększa nasze A o 1 jeśli tak zwiększa i o 1 PONIEWAŻ SPRAWDZAMY czy a (u nas 11) jest większe od 20 jeśli tak to dzielimy 11/5 = dzielenie z resztą 0 jeśli nie zwiększa nasze A o 1 PONIEWAŻ SPRAWDZAMY czy a (u nas 12) jest większe od 20 jeśli tak to dzielimy 12/5 = dzielenie z resztą 0 jeśli nie zwiększa nasze A o 1 PONIEWAŻ SPRAWDZAMY czy a (u nas 13) jest większe od 20 jeśli tak to dzielimy 13/5 = dzielenie z resztą 0 jeśli nie zwiększa nasze A o 1 PONIEWAŻ SPRAWDZAMY czy a (u nas 14) jest większe od 20 jeśli tak to dzielimy 14/5 = dzielenie z resztą 0 jeśli nie zwiększa nasze A o 1 PONIEWAŻ SPRAWDZAMY czy a (u nas 15) jest większe od 20 jeśli tak to dzielimy 15/5 = dzielenie z resztą 0 jeśli nie zwiększa nasze A o 1 jeśli tak zwiększa i o 1 PONIEWAŻ SPRAWDZAMY czy a (u nas 16) jest większe od 20 jeśli tak to dzielimy 16/5 = dzielenie z resztą 0 jeśli nie zwiększa nasze A o 1 PONIEWAŻ SPRAWDZAMY czy a (u nas 17) jest większe od 20 jeśli tak to dzielimy 17/5 = dzielenie z resztą 0 jeśli nie zwiększa nasze A o 1 PONIEWAŻ SPRAWDZAMY czy a (u nas 18) jest większe od 20 jeśli tak to dzielimy 18/5 = dzielenie z resztą 0 jeśli nie zwiększa nasze A o 1 PONIEWAŻ SPRAWDZAMY czy a (u nas 19) jest większe od 20 jeśli tak to dzielimy 19/5 = dzielenie z resztą 0 jeśli nie zwiększa nasze A o 1 PONIEWAŻ SPRAWDZAMY czy a (u nas 20) jest większe od 20 jeśli tak to dzielimy 20/5 = dzielenie z resztą 0 jeśli nie zwiększa nasze A o 1 jeśli tak zwiększa i o 1 (defun cosotam (a) (definiujemy funkcję costam z wartością a) (cond ((= a 0) 1) jeśli argument a jest równy 0 zwraca 1 (t (* a (costam (- a 1)))))) (funkcja mnoży wartość aktualną a o wartość a pomniejszoną o jeden) (costam 5) 5 czyli nasze a nie jest zerem więc wykonuje dalszy etap funkcji W dalszym etapie wartość aktualną A czyli nasze 5 mnoży przez wywołaną funkcję (costam a) ze zmniejszoną wartością a o 1 program wykonuje się dopóki wartość a nie będzie równa 0 Więc wynikiem tego programu będzie 5 * 4 * 3 * 2 * 1 = 120 cosrobi(Sum, Sum, 0 ). (definiujemy funkcję z 3 wartościami, ostatnia wartość ma przypisane już 0) cosrobi(Sum, D1, D2) :- Sum > 0, Sum1 is Sum -1, cosrobi(Sum1, D1, D3), D2 is D3 +1. (sprawdzamy czy Sum jest większe od 0, Wartość Sum1 jest to wartość SUM - 1, D2 jest to wartość D3 + 1 cosrobi(5, 2, X) Sprawdzamy czy 5 jest większe od 0 TRUE Sum1 to jest 5 - 1 czyli 4, następnie D1 przepisujemy czyli u nas ma wartość 2 , D2 to jest D3 + 1 (D3 ma przypisaną wartość początkową 0 w definicji funkcji) po przypisaniu ma 1 Sprawdzamy czy 4 jest większe od 0 TRUE Sum1 to jest 4 - 1 czyli 3, następnie D1 przepisujemy czyli u nas ma wartość 2 , D2 to jest D3 + 1 (D3 ma przypisaną wartość wcześniej przypisaną 1 w definicji funkcji) po przypisaniu ma 2 Sprawdzamy czy 3 jest większe od 0 TRUE Sum1 to jest 3 - 1 czyli 2, następnie D1 przepisujemy czyli u nas ma wartość 2 , D2 to jest D3 + 1 (D3 ma przypisaną wartość wcześniej przypisaną 2 w definicji funkcji) po przypisaniu ma 3 Sprawdzamy czy 2 jest większe od 0 TRUE Sum1 to jest 2 - 1 czyli 1, następnie D1 przepisujemy czyli u nas ma wartość 2 , D2 to jest D3 + 1 (D3 ma przypisaną wartość wcześniej przypisaną 3 w definicji funkcji) po przypisaniu ma 4 Sprawdzamy czy 1 jest większe od 0 TRUE Sum1 to jest 1 - 1 czyli 0, następnie D1 przepisujemy czyli u nas ma wartość 2 , D2 to jest D3 + 1 (D3 ma przypisaną wartość wcześniej przypisaną 3 w definicji funkcji) po przypisaniu ma 5 Sprawdzamy czy 0 jest większe od 0 FALSE Kończy działanie auto(seat, 10, 45). auto(skoda, 8, 30). auto(opel, 5, 20). auto(vw, 12, 50). auto(toyota, 15, 150). Wywołanie samochodów które mają w baku powyżej 5l i spalanie mniejsze niż 40 na 100km auto(X,Y,Z), Y > 5, Z <40, write(X). Zdefiniuj regułę która obliczy możliwoścprzejechania na jednym baku regula:- auto(X,Y,Z), G is Z/Y, write(X), write(G).