Как вызвать предикат 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, как мне получить? - person Tomer; 05.11.2017