Prolog - 第一个列表是第二个列表的子列表?

use*_*182 1 prolog

例如:

isin([1,2,3], [1,0,1,2,3,0])
Run Code Online (Sandbox Code Playgroud)

将产生真实,因为123在里面101230

我写了以下代码:

isin([AH|AT],[AH|AT]).

isin([AH|AT],[BH|BT]):- AH = BH, isin(AT,BT),isin([AH|AT],BT).
Run Code Online (Sandbox Code Playgroud)

似乎不起作用.尽量不要使用任何内置功能和BTW,Prolog有内置sublist(L1,L2)功能.

如何使用SWI-Prolog针对内置函数编写查询?我试着直接写

?- sublist([1],[2]).
Run Code Online (Sandbox Code Playgroud)

但它给了我underfined procedure错误.

是否可以看到内置函数是如何编码的?怎么样?

ДМИ*_*КОВ 8

sublist( [], _ ).
sublist( [X|XS], [X|XSS] ) :- sublist( XS, XSS ).
sublist( [X|XS], [_|XSS] ) :- sublist( [X|XS], XSS ).
Run Code Online (Sandbox Code Playgroud)

  • 有了这个定义,`sublist([1,2,3], [0,1,0,2,0,3,0]).` 是正确的。 (6认同)
  • 如果我们不想太阳序列,但真正的子列表http://hpaste.org/50293 (2认同)