2016-05-26 6 views
0

пытается создать понимание списка. Что я здесь работаю в SWI Prolog, а также Jekejeke Prolog, но оператор [< -] не работает в Yap. Невозможно выяснить, почему.Что случилось с моим определением оператора Yap?

Пришлите ссылку с/3, findall/3 и maplist/2, так как они не являются частью Yap. Я считаю, что три домашних предиката работают правильно (они делают в Jekejeke Prolog).

Yap 6.2.2, похоже, не в состоянии обработать оператора [< -]. Получает синтаксическую ошибку, непосредственно предшествующую оператору.

DEFINE операторы:

:- op(700, xfx, [ <- ]). 
:- op(450, xfx, [ .. ]). 
:- op(1100, yfx, [ & ]). 

создать шаблон для списка понимания:

Vs <- M..N :- 
    integer(M), 
    integer(N), 
    M =< N, 
    betWeen(M, N, Vs). 

Vs <- {Var & Dec & Pred} :- 
    findAll(Var, mapList(call, [Dec, Pred]), Vs). 

использовать шаблон для создания списка простых чисел из М через N включительно. Верните список как P.

primes(M, N, P) :- P <- { X & X <- M..N & prime(X) }. 

END.

+0

Невозможно воспроизвести. Может быть, у вас есть еще несколько опсов? Я наткнулся на 'betWeen', который должен иметь' w' вместо этого. – false

ответ

0

Пробовал много вещей, которые не сработали, но когда я переместил свои определения для предикатов mapList/2, findAll/3 и betWeen/3 в тот же модуль, где определены новые операторы, он решил проблему.

Эти три предиката необходимы в Yap, потому что, в отличие от SWI-Prolog, они не поставляются. Возможно, они находятся в библиотеке, которой у меня нет.