Удалить одинарные кавычки/кавычки в Прологе

У меня есть внешний API, отправляющий информацию в мое приложение Prolog, и я обнаружил проблему с созданием фактов.

Когда полученная информация обширна, Пролог автоматически добавляет к этой информации ' (одинарные кавычки).

Пример: с полученными данными я создаю факт:

object(ObjectID,ObjectName,'[(1,09:00,12:00),(2,10:00,12:00)]',anotherID)

Факт, который я хотел бы создать,

object(ObjectID,ObjectName,[(1,09:00,12:00),(2,10:00,12:00)] ,anotherID)

без ' перед списком.

кто-нибудь знает, как решить эту проблему? С предикатом, который получает '[(1,09:00,12:00),(2,10:00,12:00)]' и возвращает [(1,09:00,12:00),(2,10:00,12:00)]?


person richie    schedule 13.01.2016    source источник


Ответы (1)


То, что вы видите, является атомом, и вы хотите преобразовать его в термин, я думаю.

Если вы используете swi-prolog, вы можете использовать встроенный term_to_atom/2:

Истинно, если Atom описывает термин, который объединяется с Term. Когда создается экземпляр Atom, анализируется Atom, и результат объединяется с Term.

Пример:

?- term_to_atom(X,'[(1,09:00,12:00),(2,10:00,12:00)]').
X = [ (1, 9:0, 12:0), (2, 10:0, 12:0)].

Таким образом, с правой стороны вы вводите атом, а с левой стороны термин "эквивалент". Имейте в виду, однако, что, например, 00 интерпретируется как число и, следовательно, равно 0, это может быть непреднамеренным поведением.

Таким образом, вы можете перевести предикат как:

translate(object(A,B,C,D),object(A,B,CT,D)) :-
    term_to_atom(CT,C).

Поскольку вы не полностью указываете, как вы получаете эти данные, мне неизвестно, как вы их будете конвертировать. Но описанный выше способ, вероятно, поможет.

person Willem Van Onsem    schedule 13.01.2016