У меня есть проблема, когда мне нужно создать предикат count_height (B, X, Y), где B - список списков, X - элемент, а Y - индекс элемента в соответствующем списке.Например.
count_height([[b,c,f],[a,d,g],[h,e]],c,H).
H=1
count_height([[b,c,f],[a,d,g],[h,e]],g,H).
H=2.
Предикат также должен работать наоборот.то есть.
count_height([[b,c,f],[a,d,g],[h,e]],X,0).
X = b
X = a
X = h
Это следующее решение, которое я разработал до сих пор.
indexOf([H|_], H, 0).
indexOf([_|T], E, I):- indexOf(T, E, P), I is P+1.
count_height([H|T],X,C) :- member(X,H), indexOf(H,X,C).
count_height([H|T],X,C) :- not(member(X,H)), count_height(T,X,C).
Оно работает для первой проблемы, но не работает, если вы пытаетесь запросить ее у другогокак во втором примере.Если кто-то может исправить это или указать мне правильное направление, это было бы здорово.