Prolog에서 일반적인 차이 (http://www.purplemath.com/modules/nextnumb.htm)에 대한 간단한 알고리즘을 구현하려고합니다.) 나는 올바른 규칙을 내놓는데 어려움을 겪고있는 것 같다. ,Prolog 공통 차이점, 다항 시퀀스의 다음 번호
nextitem([A|B], NextI):-lastitem([A|B],X),
rowbelow([A|B],[Z]),lastitem([Z],Y), nextI is X+Y.
nextitem([],0).
%% recursive case: ignore first item, seek last item of rest of list
lastitem([First | Rest], Last) :-lastitem(Rest, Last).
lastitem([OnlyOne], OnlyOne).
%%at least two things in the list
rowbelow([A,B|T], [X|Y]) :-X is B-A, rowbelow([B|T],Y).
rowbelow([A,B|T], [X]) :-X is B-A.
문제는 내 옆에있는 항목을 것 같다 (내가 어딘가에 다음 항목에 재귀 호출을해야처럼 느낌하지만, 아마?) 예를 들어
: 내가 가진 rowbelow ([6,7,14,33], X). 은이 [1,7,19]를 (폴리 위해^3 + 6 ×)
트레이스는 다음 항목의 콜 아래 내 로우 같아가
그러나 다음의 아이템 (70)을 생성하지 않는다 ..이다 적절한 생산 잘못된, 그리고 행을 계속 이동하는 재귀 호출이없는 것 같아요 ...
어떤 아이디어를 다음 단계 규칙을 수정하는 방법 ?? 정말 여기에 20 시간이 걸리므로 도움을 주셔서 감사합니다. '아직 클릭하지 않았습니다.'...
여기서 계산하려는 것을 얻지 못했습니다. 하지만 다음은 몇 가지 메모입니다. nextI는 다음 항목에서 철자가 잘못되었습니다 (NextI이어야 함). 또한 rowbelow를 호출 할 때 rowbelow ([A | B], [Z]) 대신 rowbelow ([A | B], Z) 여야합니다. rowbelow의 두 번째 절은 행렬 ([_], [])이어야한다고 생각합니다. 기본 경우처럼 – gusbro