1. Нека е зададена база от данни за оценките на студентите във ФМИ по следния начин с факти:

    subject(<предмет>,<преподавател>).
    student(<ф№>,<име>).
    mark(<ф№>,<предмет>,<оценка>).

    Да се напишат въпроси на ПРОЛОГ за следните задачи:
    а) как се казват студентите, които са скъсани по предмета dis1?
    б) какви са оценките на ф№ 43210 при преподавателя ivanov?
    в) кой преподавател е писал и шестици и двойки по някой предмет?
    г) как се казва студентът, който има 6 и 2 по два различни предмета, водени от един и същ преподавател?
    д) какво е името на преподавателя, който е писал 6 на студент със същото име като неговото?
    е) кои са предметите, по които няма скъсани студенти? а преподавателите, които не са късали?
    Оформете някои избрани от вас въпроси като правила. Кога могат да се използват анонимни променливи?
  2. Напишете предикат leq(X,Y), който разпознава тези двойки кодове на числа X и Y, за които X<=Y. Можете ли да напишете предиката така, че той да може да работи като генератор? Покажете при какви въпроси това е възможно.
  3. Може ли предикатът sum да работи като разпознавател? а произволен предикат-изчислител?
  4. Защо според вас е нужно тялото nat(X) в първия факт на дефиницията на sum? Покажете с пример какво ще се промени, ако то се премахне.
  5. Работи ли sum и като генератор?
  6. Напишете предикати за пресмятане на:
    а) разлика (напишете програмата с една клауза, като използвате sum);
    б) умножение (2 клаузи);
    в) деление без остатък (1 клауза). Какво ще даде предикатът при опит за деление на 0?
    г) частно и остатък при целочислено деление (по 1 клауза). Можете ли да напишете общ предикат за двете?
    д) най-голям общ делител (3 клаузи).
  7. Напишете предикати за генериране на:
    а) четните числа;
    б) нечетните числа;
    в)* точните квадрати.
    Работят ли тези предикати като разпознаватели?
Последно модифициране: събота, 12 ноември 2011, 17:38