gpt4 book ai didi

list - 在 Prolog 中查找列表项的前导/后继

转载 作者:行者123 更新时间:2023-12-01 05:04:41 29 4
gpt4 key购买 nike

我很难将想法从 Lisp 翻译成 Prolog。我确实找到了如何在 Lisp 中找到前任和后继者,但我很难在 Prolog 中实现相同的想法。我的语法很差。请帮帮我。

示例查询:

?- predecessor(b,[a,b,c],P).
P = a. % expected result

?- successor(b,[a,b,c],S).
S = c. % expected result

最佳答案

这是一个 DCG 方法:

pred(X, P) --> stuff, [P,X], stuff.
succ(X, S) --> stuff, [X,S], stuff.
stuff --> [] | [_], stuff.

predecessor(X, L, P) :- phrase(pred(X, P), L).
successor(X, L, P) :- phrase(succ(X, S), L).

零星试验:

| ?- predecessor(a, [a,1,2,a,3], L).

L = 2 ? ;

no
| ?- predecessor(X, [1,2,3,2,5], 2).

X = 3 ? a

X = 5

no
| ?- successor(a, [a,1,2,a,3], L).

L = 1 ? a

L = 3

no
| ?- successor(X, [1,2,3,2,5], 2).

X = 1 ? a

X = 3

no
| ?-

根据@false 的评论,可以稍微整理一下实现:

predecessor(X, L, P) :- phrase((..., [P,X], ...), L).
successor(X, L, S) :- phrase((..., [X,S], ...), L).
... --> [] | [_], ... .

具有相同的测试结果。

关于list - 在 Prolog 中查找列表项的前导/后继,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23277179/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com