【问题标题】:How can I write key-value pairs in Prolog?如何在 Prolog 中编写键值对?
【发布时间】:2024-01-01 16:15:01
【问题描述】:

假设我有以下谓词,它指出 ID loc1 指定一个位置。

isLocation('loc1', 'Location 1').

我想为第二个文本 (Location 1) 提供翻译,即。 e.键值对,例如en='Location 1', de='Ort 1', ru='Местоположение 1'

在 Prolog 中编码此类数据的正确方法是什么,尤其是 TuProlog(理想情况下是标准化的 Prolog)?

下面的符号是否可以在 SWI Prolog 之外工作?

isLocation('loc1', ['en'-'Location 1', 'de'-'Ort 1', 'ru'-'Местоположение 1']]).

【问题讨论】:

  • 如果原子也是没有引号的有效原子,则无需使用单引号。简单地写下这样的原子。如loc1inde 等。使用 GNU Prolog 查看您的文本是否是有效的 ISO 语法。 SWI-Prolog 不符合 ISO 标准,不适合判断 Prolog 语法的有效性。

标签: prolog iso-prolog tuprolog


【解决方案1】:

在任何 Prolog 中工作的最简单方法是使用 member/2 来检索键值对。比如

l10n(MessageId, Country, Translated) :-
  isLocation(MessageId, Localized),
  member(Country-Translated, Localized).

这种基本结构当然需要根据要求进行一些改进。

【讨论】: