【问题标题】:Associative Lists in PrologProlog 中的关联列表
【发布时间】:2018-10-08 17:46:10
【问题描述】:

我的任务是用列表实现地图。我们将关联列表定义如下:

[] 是列表, k 是键,v 是值,a 是关联列表,那么[[k, v] | a] 是关联列表。

所以现在我必须编写一个谓词,在其中检查给定参数是否是关联列表。 例如:

?- test([[a,5]]). -> true., ?- test([[1],[2]]). -> false.

我真的很绝望,我希望有人能帮助我

问候

【问题讨论】:

  • 请注意,以小写字母开头的名称在 Prolog 中不是变量。 kva 都是原子。您可能应该从基本的 Prolog 教程开始。

标签: list dictionary prolog predicate associative


【解决方案1】:

我可以说associative lists in SWI-Prolog 是作为 AVL 树实现的,而不是作为点对的列表,尽管后者是可能的。

那么,让我们试试你的方法吧。

[] 是列表,k 是键,v 是值,a 是关联列表,则 [[k, v] | a] 是一个关联列表。

一个更正:

我建议[[ k | v ] | a] 更紧凑并且“更具关联性”)

is_assoc([]).
is_assoc([[K|V] | AL]) :- %corrected 29 apr 2018 19:00 gmt+3
    !, is_assoc( AL ).


put(KV, AL, AL0) :-
   KV = [K|V],
   get(K, AL, V),
   remove(KV, AL, AL_KV),
   put(KV, AL_KV, AL0).

put(KV, AL, [KV | AL]).

get(K, AL, V):-
   member([K|V], AL).

【讨论】:

  • @Sleeyz 我希望一切都可以理解?
  • 这段代码一团糟。你的意思是两个看跌期权的名字不同吗?即便如此,第二个会很乐意将任何内容添加到列表中。什么是删除?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多