【发布时间】:2015-06-30 08:20:41
【问题描述】:
我尝试使用列表编写 Prolog 程序。但是,我必须使用 差异列表,输出应该是:
列表的第 ith 元素与列表的 (n-i+1)th 元素相同,n 是列表的长度。例如,[a,X,c,b,Y] 应该给出X = b 和Y = a。我在其他问题中找不到类似的回文示例。
到目前为止我已经实现了:
% length of the list
len([], 0).
len([H|T], B) :-
len(T, NT),
B is NT + 1.
% return the ith element of the list
match([H|_], 0, H) :-
!.
match([_|T], N, H) :-
N > 0,
N1 is N-1,
match(T, N1, H).
但是,我无法完成。请帮帮我!
【问题讨论】:
-
Prolog 已经有
length/2,所以你不需要编写自己的列表长度谓词(len/2)。还有一个 Prolog 谓词用于返回列表的第 n 个元素(参见 SWI Prolog 的nth0/3或nth1/3)。另外,您所描述的是一个回文。通过搜索“prolog palindrome”,您可能会找到几个可以使用的示例。 -
@mescalinum 我不这么认为。我还搜索了有关回文的其他问题。你能帮帮我吗
标签: list prolog palindrome dcg difference-lists