Въпроси по ПРОЛОГ

Member deep

Member deep

от Боян Табаков -
Number of replies: 2
Може ли да припомниш, кои предикати можехме да ползваме наготово?
И още един въпрос:
предиката, който писахме на упражненията member_deep (на кратко md) изглеждаше така:
md(X, [X|T]):-!.
md(X, [[H|T]|_]):-md(X, [H|T]), !.
md (X, [_|T]):-md(X, T).
Така той работи като разпознавател, но като генератор - не. Защо?
Ако махна !-овете работи и като генератор...
In reply to Боян Табаков

Re: Member deep

от Трифон Трифонов -
Здравей,
  преместих темата, защото не е по задачата за палиндроми :) Иначе за контролното в крайна сметка с другите асистенти решихме да си пишете всичко. Това което можете да използвате наготово са аритметичните операции, т.е. няма нужда да си пишете модул, степен и т.н.
  По въпроса за md - един предикат работи като генератор, ако позволиш при преудовлетворяване да се влиза в различни случаи. Ако сложиш !, ти ограничаваш случаите да са взаимно изключващи се в стила if-then-else. Предикатът е генератор ако при преудволетворяване минава през всички клаузи.