2014-10-22 6 views
2

Мне нужно поставить «вокруг строки в прологе». Я получаю вход от другой программы, и, как мне кажется, я не могу избежать «в этой программе, поэтому мне нужно добавить« в прологе », иначе инструкция пролога не будет работать.SWI Prolog escape quotes

Благодарим за помощь!

+0

Можно также рассмотреть возможность использования 'atom_string/2', например:'? - atom_string (monkey, String) .' приводит к 'String =" обезьяне ". –

+1

Спасибо за ваш ответ. Я получил решение. У меня был совершенно неправильный подход. Это было изменение от SWI6 до SWI7. Я снова установил SWI6.6, и теперь он работает отлично. – Tim

+0

@Tim: В SWI7 есть некоторые специфические изменения без ISO в отношении двойных кавычек. – false

ответ

1

Для обсуждения 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"'. 
+0

Какой SWI-Prolog вы использовали? А если 7.x, вы использовали параметр командной строки «--traditional»? – repeat

+0

Почему вы спрашиваете? Что-то не так в моем ответе? Единственным не-ISO является синтаксис \ uXXXX. Я не знаю, существовал ли он уже в SWI6 или присутствует только в SWI7. –

+0

Мне было просто любопытно! – repeat