XSB Prolog: написать свою собственную функцию setof

Мне нужно получить из ввода с клавиатуры (список) список без дубликатов, но без использования встроенного setof (или любых других встроенных функций) в прологе XSB.

Как мне написать свою собственную функцию setof?

Ввод и вывод должны выглядеть так:

|?-list([a,b,c,d,a,b,c,d,e,f],L).  

L=[a,b,c,d,e,f];

Заранее спасибо.


person user3033489    schedule 26.11.2013    source источник
comment
я обновил сообщение, мы не можем использовать какие-либо встроенные функции, которые выводят сортировку из уравнения   -  person user3033489    schedule 26.11.2013
comment
вы как пишете member/2 ?   -  person CapelliC    schedule 26.11.2013
comment
я знаю, как использовать member/2, но я думаю, что это тоже встроено, или я ошибаюсь? это все должно быть написано мной ..   -  person user3033489    schedule 26.11.2013
comment
Напишите list/2, основываясь на существовании предиката member/2 (назовите его mem или has_element или как-то еще, не встроенного), затем напишите предикат mem/2 или has_element/2, что очень просто.   -  person lurker    schedule 26.11.2013
comment
спасибо, ребята, вы меня очень выручили :)   -  person user3033489    schedule 26.11.2013


Ответы (1)


Использовать member/2 очень просто: просто сделайте копию каждого элемента с помощью рекурсивного списка/2, проверяя заголовок входного списка, которого еще нет в целевом списке. Проверку может выполнить member/2, вам нужно будет написать свою собственную... Вся программа должна состоять из 4 строк кода.

person CapelliC    schedule 26.11.2013