我正在序言中做关联列表
我看到了这个主题,但我不明白代码。
Prolog 中的关联列表 https://stackoverflow.com/questions/50069875/associative-lists-in-prolog
要检查列表是否关联,这样做还不够:
lists([_X, _Y]).
lists([[H|_T]|L],[H|T]):- lists(L,T).
因为对于第一个 /1 我检查是否有这样的元素 [a,3]
/2 以这种方式获取列表 [[a,4],[a,3]] 的列表。
因此,首先在 [a,3] 上传递调用 list/2,并检查基本情况为 true,然后在调用 [a,4] 后也为基本情况调用 true。
我错了一些东西,但我不明白
任何人都可以澄清我吗?
OP 2019-01-01 10:40:47Z 更新:
我尝试用这样的方式解决:
islist([_X,_Y]).
islist([_X|T]):- islist(T).
在这种情况下仅接受这样的输入
[[k,v],[k,v],[k,v]]
但接受所有输入,如下所示:
- [a]
- [k,v,v,v]
- [[k,v],[k,v],[k,v,v]]
所以我的问题仍然存在。
从链接的问题:
"[]
是列表; [此外,如果]k
是一把钥匙,v
是一个值并且a
是一个
关联列表,那么[[k, v] | a]
是一个关联列表。”
只需在 Prolog 中写下:
associative_list(L) :- L = [].
associative_list(L) :- K=K, V=V, associative_list(A), L = [[K, V] | A].
当然,Prolog 作为一种编程语言,不仅具有逻辑语义,还具有操作问题,因此最后一行最好写为
associative_list(L) :- L = [[_K, _V] | A], associative_list(A).
一种惯用的写法是
associative_list([]).
associative_list([[_, _] | A]) :- associative_list(A).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)