Фильтрация случайных результатов из результата maplist/3

Я хочу отфильтровать этот список List=['F1',a1,a2,' LF2',a1,a2] с предикатом is_upper/2 и maplist/3 ниже

is_upper(Elem,Res): если Elem является атомом в верхнем регистре, он будет назначен Res, тогда я хотел бы поместить все атомы в верхнем регистре в список List_Upper

я пробую это;

?- maplist(is_upper,List,List_upper).
List_Upper = ['F1',_A,_B,'F2',_C,_D,'F3',_E,_F] ? ;

как я могу отфильтровать случайные ауты _A,_B...

ожидаемый результат:

 List_Upper = ['F1','F2','F3'] 

С уважением


person Ans Piter    schedule 21.01.2016    source источник
comment
Ознакомьтесь с важными метапредикатами include/3, exclude/3 и partition/5.   -  person mat    schedule 21.01.2016
comment
@mat: спасибо, это работает с exclude/3 exclude(is_upper,List,List,upper).   -  person Ans Piter    schedule 21.01.2016
comment
@mat я заметил, что с SWI гораздо проще обращаться, чем с SICS, но у некоторых из них есть свои преимущества; SICS намного быстрее, но жадно с memory, тогда как SWI менее быстро, хотя и скупо с memory. Не могли бы вы посоветовать мне, какой prolog tools я использовал на первом этапе изучения Prolog? С уважением   -  person Ans Piter    schedule 21.01.2016
comment
На мой взгляд, SWI действительно удобнее для новичков: у него есть make/0, графический трассировщик и много автозагрузки. Все эти функции хороши для небольших программ и хороши для начинающих, но они имеют тенденцию неожиданно ломаться в более серьезных сценариях. Я рекомендую вам начать с SWI-Prolog, а затем купить SICStus для серьезной работы.   -  person mat    schedule 21.01.2016
comment
@mat, извините, последний qst :) prolog (SWI) имеет дизайн интерфейса, такой как SICS(TCL)? и где лучший и простой способ сделать это, как java(swing)? какой-то туто-сайт   -  person Ans Piter    schedule 21.01.2016
comment
У SWI есть XPCE, но в настоящее время вы обычно выбираете веб-маршрут и используете library(pengines) SWI и мощные веб-библиотеки.   -  person mat    schedule 21.01.2016


Ответы (1)


include/3 для сбора элементов истинного результата и exclude/3 для ложных

| ?- include(is_lower,['FUNCTOR1','arg1','arg2','FUNCTOR2','arg3','arg4','FUNCTOR3','arg5','arg6'],List_Lower).
List_Lower = [arg1,arg2,arg3,arg4,arg5,arg6] ? ;
no
person Ans Piter    schedule 21.01.2016