Prolog dodawanie liczb

0

Witam mam program ktory dodaje 2 pierwsze liczby z tablicy i je wypisuje.Problem jednak w zeby mi wytlumaczyc dlaczego program

dodawanieliczb([],[]).
dodawanieliczb([H1|[]],[H1]).
dodawanieliczb([H1,H2|T],[H3|T3]):-H3 is H1+H2,dodawanieliczb(T,T3).

dziala rowniez w tej postaci (zmienia sie tylko 2 linijka)

dodawanieliczb([],[]).
dodawanieliczb(H1,H1).
dodawanieliczb([H1,H2|T],[H3|T3]):-H3 is H1+H2,dodawanieliczb(T,T3).

Jaka jest roznica w tym ?

0

Zakładam że SWI-Prolog.

  1. To ma działać tak rekurencyjnie:?
15 ?- dodawanieliczb([1, 2, 5, 6], X).
X = [3, 11].

16 ?- dodawanieliczb([1], X).
X = [1] .
dodawanieliczb([H1|[]],[H1]).

To nie ma większego sensu, chyba że płacą Ci za ilość znaków w kodzie :]

dodawanieliczb([H],[H]).

To samo, ale krócej.

dodawanieliczb(H,H).

Nie to samo, niestety.

23 ?- dodawanieliczb([1, 2, 5, 6], X).
X = [1, 2, 5, 6] .

24 ?- dodawanieliczb('kot i płot', X).
X = 'kot i płot'.
  1. dodawanieliczb to... Brzydka nazwa. Taka imperatywna. Spróbuj wyjść z czymś deklaratywnym, jak np. sumy_par jeśli ma być po polsku.
0

tak swi-prolog. Dokladnie tak ma dzialac tak jak opisales.

tak dzieki za odp=] ale przyjacielu powiedz mi czym sie roznia te linijki, ze to samo ale krocej. Potrzebuje tylko info czym sie roznia te 2 zapisy=] Musze taka odpowiedz jutro udzielic heh

0

No zapis [H|T] oznacza że H jest pierwszym elementem listy a T resztą:

34 ?- [H|T] = [1, 2, 3].
H = 1,
T = [2, 3].

Zapis [2|T] oznacza że 2 jest pierwszym elementem a T resztą

Zapis [H|[]] oznacza że H jest pierwszym elementem a reszta jest pusta, czyli to jednoelementowa lista równa [H].

0

wie ktos moze jak zrobic program ktory wypisze mi liczby z tablicy wieksze od 10?

1 użytkowników online, w tym zalogowanych: 0, gości: 1