Home     Termíny     Cvičení     Projekty     Rezervace termínu
  1   2   3   4   5   6

1. cvičení

27.2.2013 12:00 v B204


Osnova


  1. Do pracovniho adresare si stahnete program rodokmen.pl. Načtěte program v interpretu (konzultujte).

  2. V interpretu Sicstus Prologu pokládejte dotazy:
    a) Je Petr otcem Lenky?
    b) Je Petr otcem Jana?
    c) Kdo je otcem Petra?
    d) Jaké děti má Pavla?
    e) Ma Petr dceru?
    f) Které dvojice otec-syn známe?

  3. Naprogramujte predikáty
    a) potomek(Potomek,Predek)
    b) prababicka(Prababicka,Pravnouce)
    c) nevlastni_bratr(Nevlastni_bratr,Nevlastni_sourozenec)

  4. Prohledávání stavového prostoru:
    a) Zkuste předem odhadnout (odvodit) pořadí, v jakem budou nalezeni potomci Pavly?
    b) Jaký vliv má pořadí klauzulí a cílu v predikátu potomek/2 na jeho funkci?
    c) Nahraďte ve svých programech volání predikátu rodic/2 následujícím predikátem rodic_v/2
    rodic_v(X,Y):-rodic(X,Y),print(X),print('? ').
    
    Pozorujte rozdíly v délce výpočtu dotazu nevlastni_bratr(filip,X) při změně pořadí testů v definici predikátu nevlastni_bratr/2

  1. Jak se liší následující dotazy (na co se kdy ptáme)? Které uspějí (kladná odpověď), které neuspějí (záporná odpověď), a které jsou špatně (dojde k chybě)? Za jakých předpokladů by ty neúspěšné případně špatné uspěly?
    a) X = Y + 1
    b) X is Y + 1
    c) X = Y
    d) X == Y
    e) 1 + 1 = 2
    f) 2 = 1 + 1
    g) 1 + 1 = 1 + 1
    h) 1 + 1 is 1 + 1
    i) 1 + 2 =:= 2 + 1
    j) X \== Y
    k) X =\= Y
    l) 1 + 2 =\= 1 - 2
    m) 1 <= 2
    n) 1 =< 2
    o) sin(X) is sin(2)
    p) sin(X) = sin(2+Y)
    r) sin(X) =:= sin(2+Y)
    
  2. Jak se liší predikáty s1/3 a s2/3? Co umí s1/3 navíc oproti s2/3 a naopak?
    s1(0,X,X).
    s1(s(X),Y,s(Z)):-s1(X,Y,Z).
    
    s2(X,Y,Z):- Z is X + Y.
    
  3. Domácí úkol: upravte následující predikát s aritmetikou na vícesměrný (využijte některé metalogické predikáty pro testování "typů" argumentů, např. var/1, nonvar/1, number/1, integer/1 , definice těchto vestavěných predikátů najdete zde)
    soucet(X,Y,Z):- Z is X+Y.
    

^