from_to/3
을 구현하도록 요청한 연습을하고 있었는데 처음 두 개의 인수로 두 개의 숫자를주고 Prolog는 결과 사이에 모든 것의 목록을 제공합니다. 예 : from_to(1,5,R)
은 R=[1,2,3,4,5]
이됩니다. 이 다섯 가지 삼의 목록을 반환 쿼리 fromto(3,8,R)
와이러한 유사한 프로그램의 결과가 다른 이유는 무엇입니까?
fromto(N, O, []):-
N >= O.
fromto(N, O, [N|TailResult]):-
O > N,
O1 is O-1,
fromto(N, O1, TailResult).
:
나는 다음과 같은 프로그램을 썼습니다. 안좋다. 올바른 방법은 될 것이라고 처리하기 : 의도 한대로from_to(N, O, []) :-
N > O.
from_to(N, O, [N|TailResult]) :-
N =< O,
N1 is N + 1,
from_to(N1, O, TailResult).
이것은 list 3,4,5,6,7,8
을 제공합니다.
제 질문은 이것이 어떻게 작동하는지입니다. 프로그램은 내가 O와 함께 아래에서 아래로 작업 한 점과 N에 추가하여 올바른 것으로 작동한다는 점만 다릅니다. 그러나 결과는 완전히 다릅니다. 이 문제의 원인을 아는 사람이 있습니까?
'append/3'을 사용하는 대신 [tag : dcg] -notation을 사용하여 두 가지 접근법을 공식화하는 것이 더 통찰력이 있습니다. – false
@false 당신은 바로 dcg 솔루션을 추가했습니다. – coder