如何在Prolog中编写键值对?

如何在Prolog中编写键值对?,prolog,iso-prolog,tuprolog,Prolog,Iso Prolog,Tuprolog,假设我有以下谓词,它表示IDloc1指定一个位置 isLocation('loc1', 'Location 1'). 我想为第二个文本(位置1)提供翻译,即。E键值对,例如en='Location 1',de='Ort 1',ru='Мцжцжцц1' 在Prolog中,尤其是TuProlog(以及理想的标准化Prolog)中,编码此类数据的正确方法是什么 下面的符号在SWI Prolog之外有效吗 isLocation('loc1', ['en'-'Location 1', 'de'-'Or

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

isLocation('loc1', 'Location 1').
我想为第二个文本(
位置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']]).

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

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

这种基本构造当然需要一些改进,具体取决于需求。

如果atom也是一个没有引号的有效atom,那么就不需要使用单引号。简单地写下这些原子。如
loc1
中的
de
等。使用GNU Prolog查看文本是否为有效的ISO语法。SWI Prolog不符合ISO标准,不适合判断Prolog语法的有效性。