답변
between/3이 작동 할 수 있는지 확인해야 어떤 실제적인 사용을 위해 간단한 마음 절차
findSequence(N, N, N) :- !.
findSequence(S, E, N) :-
S < E, (N = S ; T is S + 1, findSequence(T, E, N)).
findSequence(S, E, N) :-
S > E, (N = S ; T is S - 1, findSequence(T, E, N)).
.
완벽한 답변. –
최종 값 (-6)에 시작 값 (-4)의 값을 (목록에서) 당신이 축적되는 재귀 술어를 사용하는 것을 고려 보일 것입니다.
이렇게하면됩니다. 여기에는 < =부터.
?-findSequence(1,3,List).
List=[1,2,3].
yes
'? - findSequence (-4, -6, S) .' 루프. – false
여기서 문제는 -4> -6 ... 역순으로 바꾸려면 From + 1에서 From-1로 변경하십시오. 그래서 이것을 호출하는 올바른 방법은 findSequence (-6, -4, S)입니다. – Alejandro
자를 잘못 사용하는 것이 문제입니다. 'findSequence (1,3, [_, _, _, _ | _])'시도해보십시오. '-4'의 경우'-6' 실패 (자신을 제한하는 경우) 또는 성공이 예상됩니다. 그러나 반복하지 마라. – false
이 무엇을 요구하는지하는 것은 특히 어려운 일이 아니다 재미있는 경우는 다음과 같습니다 당신이
findSequence(X,X,[X]):-!.
findSequence(From,To,[From|Rest]):-SuccFrom is From +1, findSequence(SuccFrom ,To, Rest).
이것은 목록, 즉 반환하는 경우 확인하려면 조금 더 복잡한 쓸 수있다 그러나 당신은 우리가 당신이 원했던 것을 이해하려고 많은 시간을 보냈다. 순서 (즉, 목록)를 원하지 않으면 연속적인 답을 원합니다. 그리고 자연수가 아닌 모든 정수로 작업하기를 원합니다. 이것은 귀하의 예에서는 함축되어 있지만 명시되지 않았습니다. 또한 -4는 -6보다 큽니다. 이는이 술어가 일반적으로 쓰여지는 것과 반대입니다. 바로 찾을 수
min(X, Y, Z) :- X < Y -> Z = X ; Z = Y.
max(X, Y, Z) :- X < Y -> Z = Y ; Z = X.
이 :
:- use_module(library(clpfd)).
우리는 몇 가지 도우미 술어가 필요합니다
이 모든 처리하기 위해, 나는 확신 해요 가장 간단한 것은 라이브러리 clpfd
이 필요 최소 및 최대; 나는 보통 두 줄씩 쓴다.하지만 이것이 더 편리하다. 이제 해결책 :
findSequence(X, Y, Z) :-
min(X, Y, Low),
max(X, Y, High),
Z in Low..High,
label([Z]).
이것은 유스 케이스와 명백한 문제를 처리합니다. 여기
- 1. 시작/종료
- 2. 비밀 번호로 서비스 시작 안드로이드
- 3. 변수 이름을 SAS에서 번호로 시작
- 4. 시작 날짜와 종료 날짜
- 5. UITableView 시작/종료 업데이트
- 6. Outlook 시작/종료 모니터링
- 7. icalendar 날짜 시작 및 종료 종료 시간대
- 8. 게시물의 시작 날짜와 종료 날짜
- 9. 시작 날짜와 종료 날짜 DateDialogPickers
- 10. HTML의 시작 및 종료 태그
- 11. SQL 보장 시작/종료 인덱스?
- 12. 시작 및 종료 쿼리 문자열
- 13. XML 시작 및 종료 태그
- 14. CKEditor 종료/태그 시작 감지
- 15. 얻기 시작 날짜와 종료 날짜
- 16. 유효 날짜 시작 및 종료
- 17. Jboss 시작/종료 로직 추가
- 18. 시작/종료 날짜의 점검 제한
- 19. jquery의 시작 날짜와 종료 날짜
- 20. 종료 태그가 일치하는 시작 태그
- 21. 어떻게 종료 날짜에서 이벤트의 날짜와 종료 날짜를 시작 얻을 수
- 22. 시작 날짜와 종료 날짜 사이의 날짜 충돌 확인 (db 열에 시작 날짜와 종료 날짜가 있음)
- 23. 일치하는 시작 태그가없는 종료 태그 "table"이 있습니다. 시작/종료 태그의 균형이 맞습니까?
- 24. mysql - 시작 연도와 시작 월 사이의 행을 선택하여 연말과 종료 월을 종료 하시겠습니까?
- 25. 이벤트 시작 시간과 종료 시간을 다른 이벤트 시작 시간과 종료 시간과 비교하는 방법
- 26. OpenMP - 스레드가있는 배열 카운터를 다른 시작 번호로 만드십시오.
- 27. Symfony 양식 시작 및 종료 시간 위젯
- 28. 여러 변수의 프로세스 시작 및 종료 모니터링
- 29. 응용 프로그램 종료 시간 및 시작 시간
- 30. XML 시작 시간 및 종료 시간
나는 다음과 같은 두 줄을 썼다. 내가 예상 한대로 추적하고 있지만 최종 값을 인쇄하고있다.
–
다음 두 줄은 어디에 있는가? –
@DanieLyons와 Alejandro : 다음 findSequence (X, X, X)를 썼습니다. findSequence (X, Y, Z) : - Y> X, X1은 X + 1, findSequence (X1, Y, Z)입니다. 여기서 문제는 최종 값을 인쇄한다는 것입니다. 재귀에서 X의 모든 값에 대해 인쇄하고 싶습니다. –