Как да извикам предиката split_string на swi-prolog?

Опитвам се да използвам предполагаемия вграден предикат split_string/4 от документацията тук: http://www.swi-prolog.org/pldoc/man?predicate=split_string/4

Въпреки това, когато се опитам да го използвам, както в примера, получавам нещо подобно:

?- split_string("a.b.c.d", ".", "", L).
ERROR: toplevel: Undefined procedure: split_string/4 (DWIM could not correct goal)

какво правя грешно Трябва ли първо да заредя библиотека?


person svelten    schedule 13.06.2014    source източник
comment
имате нужда от SWI-Prolog версия 7 или по-нова   -  person CapelliC    schedule 13.06.2014


Отговори (1)


split_string/4 е специфична за SWI вградена, която е въведена в SWI7. Той не присъства в търговските версии на Prolog като SICStus, нито в ISO, така че използването му ще намали бъдещите ви възможности за промяна. Също така имайте предвид, че интерпретацията по подразбиране за двойни кавички обикновено е codes, вижте Каква е разликата между ' и в Пролог?

В предишните версии на SWI, тоест в SWI6 и преди, има concat_atom/3 респ. atomic_list_concat/3, което ви дава сравнима функционалност.

?- atomic_list_concat(L,'_',a_b__c).
L = [a,b,'',c].

След това има вградени ISO: atom_concat/3 и sub_atom/5, които могат да се използват за внедряването му. Така че използването на atomic_list_concat/3 не би представлявало голям проблем с преносимостта.

person false    schedule 13.06.2014
comment
Благодаря за вашия принос. И така, как мога да получа втората част от низ като например за Prolog/a как мога да получа a? - person Tomer; 05.11.2017