Been poważnie dawno pisałem żadnej prolog, ale pewnie bym robić rzeczy trochę inaczej. Coś takiego, choć nie mogę tego przetestować w tym momencie.
print_increasing_numbers(From, To):- From > To, !, write('ERROR: From > To').
print_increasing_numbers(To, To):- !, write(To).
print_increasing_numbers(From, To):- write(From),
nl,
Next is From + 1,
print_increasing_numbers(Next, To).
Kluczową różnicą jest tu !
lub pocięte operacja, która przestaje wycofywania. Jeśli go nie uwzględnisz, otrzymasz rozwiązanie z pierwszym klauzulą, gdy X
ma 10, ale jeśli poprosisz o drugie rozwiązanie, będzie ono również cofało się i pasowało do drugiej klauzuli. To spowodowałoby znacznie większą listę liczb, niż chcesz.
Mmmmmm, że próbowałem i nie działa, drukuje " ERROR:>/2: Argumenty są niewystarczająco instancja wyjątek: (7) print_increasing_numbers (_G272 + 1, _G305)? Pełzanie " – dasen
-1 za nie testowanie kodu i brak oceny" X + 1 " – Kaarel
@Kaarel: Dzięki. Zapomniałem o tym aspekcie zachowania prologa. Po wprowadzeniu tej poprawki i pamiętaniu o zmianie nazwy X i Y na Od i Do, działało dobrze. – torak