[英]How to define difference-list in prolog
使用差異列表,如何通過將前兩個元素移動到列表末尾來旋轉給定列表,使 [a,b,c,d] 變為 [c,d,a,b]。
如果為您提供了差異列表,則可以使用:
?- L = [a,b,c,d,e,f|R], L = [H1, H2|T], R = [H1, H2].
T = [c,d,e,f,a,b].
作為 DCG(比差異列表更人性化),在 swi-prolog 中:
% For remainder/1
:- use_module(library(dcg/basics)).
% Show lists of codes nicely
:- portray_text(true).
rotate2, Rem, [E1, E2] --> [E1, E2], remainder(Rem).
結果 swi-prolog:
?- phrase(rotate2, `abcdef`, R).
R = `cdefab`.
或者,如果您還需要尾巴:
rotate2_tail([A, B|T]) --> T, [A, B].
?- phrase(rotate2_tail(`abcdef`), L, R).
L = `cdefab|R`.
作為第三種方法(請注意,問題中沒有指定實際差異列表):
?- L = [a,b,c,d,e,f], L = [H1, H2|T], append(T, [H1, H2], L2).
L2 = [c,d,e,f,a,b].
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.