Для обсуждения strings см. Здесь, они являются спецификациями SWI-Prolog, но используют те же правила эвакуации, что и атомы. Существует много способов ввода котировок в атом в тексте Пролога:
1) Удвоение их. Так, например, «can''t be» - это атом, с одной цитатой в качестве четвертого символа, и никаких других одинарных кавычек в нем.
2) Убегая их, с обратной косой чертой. Так, например, 'can \' t be '- это тот же атом, что и' can''t be '.
3) Кодировка символов, использующая восьмеричный код и закрывающий косую черту. Так, например, 'can \ 47 \ t be' - это тот же атом, что и 'can''t be'.
4) Кодирование символов с использованием шестнадцатеричного кода и закрывающей обратной косой черты. Так, например, 'can \ x27 \ t be' - это тот же атом, что и 'can''t be'.
Указанные выше возможности определены в стандарте ISO. A Пролог может определить дополнительные возможности.
Bye
P.S .: Ниже приведен пример работы в SWI-Prolog, используя другой пример характер. В первом примере запроса ниже вам не нужно , нужно удвоить, удвоение можно сделать только для близкой цитаты.
В последнем примере запроса ниже показывает SWI-Prolog определенный синтаксис , который не найден в стандарте ISO, а именно с помощью обратной косой черты у с фиксированной шириной шестнадцатеричный код:
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 7.1.33)
Copyright (c) 1990-2015 University of Amsterdam, VU Amsterdam
?- X = 'she said "bye"'.
X = 'she said "bye"'.
?- X = 'she said \"bye\"'.
X = 'she said "bye"'.
?- X = 'she said \42\bye\42\'.
X = 'she said "bye"'.
?- X = 'she said \x22\bye\x22\'.
X = 'she said "bye"'.
?- X = 'she said \u0022bye\u0022'.
X = 'she said "bye"'.
Можно также рассмотреть возможность использования 'atom_string/2', например:'? - atom_string (monkey, String) .' приводит к 'String =" обезьяне ". –
Спасибо за ваш ответ. Я получил решение. У меня был совершенно неправильный подход. Это было изменение от SWI6 до SWI7. Я снова установил SWI6.6, и теперь он работает отлично. – Tim
@Tim: В SWI7 есть некоторые специфические изменения без ISO в отношении двойных кавычек. – false