2

我有一个外部 API 向我的 Prolog 应用程序发送信息,但我发现创建事实时出现问题。

当收到的信息很广泛时,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)]

4

1 回答 1

2

您看到的是atom,并且您想将其转换为我认为的术语。

如果你使用,你可以使用内置的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)].

所以在右边,你输入atom,在左边输入“等价”项。但是请注意,例如00被解释为数字,因此等于0,这可能是意外行为。

因此,您可以将谓词翻译为:

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

由于您没有完全指定如何获取此数据,因此我不知道您将如何转换它。但是上面的方法可能会有所帮助。

于 2016-01-13T15:53:58.163 回答