Prolog 获取列表中给定元素的索引
我试图解决一些基本的难题来学习prolog。我试图通过递归获得列表中给定元素的索引。我在试图解决这个问题时遇到了困难,我不知道为什么。当我执行这个命令时,它只返回“false”,而不是索引Prolog 获取列表中给定元素的索引,prolog,Prolog,我试图解决一些基本的难题来学习prolog。我试图通过递归获得列表中给定元素的索引。我在试图解决这个问题时遇到了困难,我不知道为什么。当我执行这个命令时,它只返回“false”,而不是索引 elem(_, [], 0). elem(E, [E | T], RES) :- elem(E, T, CUR_RES), RES is CUR_RES + 1. 我使用一个示例查询来检查代码元素(2[1,2],X)。您的问题 elem(2, [1, 2], X). 当它试图与基本情况统一时
elem(_, [], 0).
elem(E, [E | T], RES) :-
elem(E, T, CUR_RES), RES is CUR_RES + 1.
我使用一个示例查询来检查代码元素(2[1,2],X)。
您的问题
elem(2, [1, 2], X).
当它试图与基本情况统一时
elem(_, [], 0).
它失败,因为第二个参数不是空的
当它试图与递归案例统一时
elem(E, [E | T], RES) :-
elem(E, T, CUR_RES),
RES is CUR_RES + 1.
E
是2
,这要求列表是[2 | T]
,但由于列表是[1,2]
,因此它也不能统一
这更接近你想要的
elem(E,[E|_],0).
elem(E,[_|T],Res) :-
elem(E,T,Cur_rest),
Res is Cur_rest + 1.
示例运行:
?- elem(2, [1, 2], X).
X = 1 ;
false.
?- elem(1, [1, 2], X).
X = 0 ;
false.
?- elem(4, [1,2,3,4,5], X).
X = 3 ;
false.
您需要对在基本情况下而不是递归情况下查找的值进行匹配。一旦您这样做,其余的更改将根据需要进行。可能有助于