Prolog 中的关联列表
Associative list in Prolog
我正在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,并检查基本情况是否为真,然后在调用 [a,4] 之后也为基本情况调用 true。
我错了,但我没看到,
谁能帮我解释一下?
OP 2019-01-01更新10:40:47Z:
我尝试这样解决:
islist([_X,_Y]).
islist([_X|T]):- islist(T).
在这种情况下只接受以这种方式输入
[[k,v],[k,v],[k,v]]
但像这样接受所有输入:
- [一个]
- [k,v,v,v]
- [[k,v],[k,v],[k,v,v]]
所以我的问题仍然存在。
来自链接的问题:
"[]
is the list ; [also, if] k
is a key, v
is a value and a
is an
associative list, then [[k, v] | a]
is an associative list."
只需在 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).
我正在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,并检查基本情况是否为真,然后在调用 [a,4] 之后也为基本情况调用 true。
我错了,但我没看到,
谁能帮我解释一下?
OP 2019-01-01更新10:40:47Z:
我尝试这样解决:
islist([_X,_Y]).
islist([_X|T]):- islist(T).
在这种情况下只接受以这种方式输入
[[k,v],[k,v],[k,v]]
但像这样接受所有输入:
- [一个]
- [k,v,v,v]
- [[k,v],[k,v],[k,v,v]]
所以我的问题仍然存在。
来自链接的问题:
"
[]
is the list ; [also, if]k
is a key,v
is a value anda
is an associative list, then[[k, v] | a]
is an associative list."
只需在 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).