Я реализую некоторые из встроенных функций пролога как практика. Тем не менее, я столкнулся с трудностями в пересечении и различии, потому что в моем рекурсивном случае базы мне нужно установить возвращаемое значение в пустой набор. Я понятия не имею, как это сделать и оглядываясь, я не нашел ответа.Создание переменной пустого набора
Когда я запускаю код, я получаю следующее:
1 ?- intersectionx([1,2,3],[3,4,5],Z).
Z = [3|_G3196] .
2 ?- differencex([1,2,3],[3,4,5],Z).
Z = [1, 2|_G3181]
Вот фактическая построчно с соответствующими предикатами по линиям 16 и 22.
/* memberx */
/* test is X a member of set Y, X subset Y */
memberx(X1,[X1|_]).
memberx(X2,[_|T2]) :- memberx(X2, T2).
/* unionx */
/* union sets X and Y and return the resulting set as Z. */
unionx([], Y3, Y3). /* base case */
unionx([XH4|XT4], Y4, Z4) :- memberx(XH4, Y4), unionx(XT4, Y4, Z4).
unionx([XH5|XT5], Y5, [XH5|Z5]) :- not(memberx(XH5, Y5)), unionx(XT5, Y5, Z5).
/* intersectionx ???*/
/* Find the intersection of sets X and Y and return the result as set */
/* Z. X intersection Y = Z */
intersectionx([], Y6, Z6). /*In the base case here how do I set Z6 to []?*/
intersectionx([XH7|XT7], Y7, Z7) :- not(memberx(XH7, Y7)), intersectionx(XT7, Y7, Z7).
intersectionx([XH8|XT8], Y8, [XH8|Z8]) :- memberx(XH8, Y8), intersectionx(XT8, Y8, Z8).
/* differencex */
/* Find the difference of set X and Y and return the result as set Z. */
differencex([], Y9, Z9).
differencex([XH10|XT10], Y10, [XH10|Z10]) :- not(memberx(XH10, Y10)), differencex(XT10, Y10, Z10).
differencex([XH10|XT10], Y10, Z10) :- memberx(XH10, Y10), differencex(XT10, Y10, Z10).
Я знаю, что это, вероятно, относительно простая вещь, но это меня озадачило в течение некоторого времени.
На самом деле это должно быть 'intersectionx ([], _, []).' – gusbro
Спасибо, я исправил его. –
Спасибо. Я знал, что это будет что-то простое, я просто не знал, что. Я цифра переменных, потому что я копирую старое домашнее задание, где мне приходилось делать все это в клаузуальной форме, и профессор потребовал, чтобы мы указали этот путь. Сначала я скопировал его из старого документа, чтобы он стал артефактом этого. Я собираюсь убрать их. – stygma