나는리스트의 크기를 평가하는 조건부를 작성하려고했는데,리스트의 길이 또는 산술 연산을 계산하지 않아도된다. 그것은 아마 길이를 계산하는 것보다 쉬울 지 모르지만 나는 그것없이 그것을하는 방법을 생각하는 데 어려움을 겪고있다. 나는 일종의 재귀 기술을 추측하고 있지만 누구라도 도움이된다면 훌륭 할 것입니다.프롤로그에서 짝수 크기의 목록
답변
나는 귀하의 질문에 답변을 너무 늦게 알아,하지만 희망이 도움이됩니다
목록을 찾으려면 홀수 길이 :
evenlength([]).
evenlength([X,Y|R]) :- evenlength(R),!.
: 목록을 찾으려면
oddlength([X]).
oddlength([X,Y,Z]).
oddlength([X,Y|R]) :- oddlength(R),!.
도 길이가
홀수/짝수 목록 길이 만 신경 쓰면 재귀 호출의 목록 꼬리를 제외하고 익명 변수를 자리 표시 자로 사용하십시오. –
나는이 답변을 게시했으나 숙제에 관한 질문이므로 삭제했다. 일반적으로 숙제를하는 사람들에게 전체 솔루션을 제공하지 마십시오. 복사하여 붙여 넣습니다. – keyser
@keyser 물론, 저는 여기 새로 왔습니다. 조언 해 주셔서 감사합니다. –
보존 logical-purity! 간단하게 다음과 같이 진행 :
evenlength([]). % smallest list with even length is [] (length=0)
evenlength([_|Xs]) :-
oddlength(Xs).
oddlength([_|Xs]) :- % smallest list with odd length is [_] (length=1)
evenlength(Xs).
몇 가지 간단한 접지 evenlength/1
에 대한 쿼리 및 oddlength/1
: 이러한 조건뿐만 아니라 테스트 후보 목록뿐만 아니라 그것들을 생성 할 수
?- evenlength([]).
true.
?- oddlength([]).
false.
?- evenlength([1]).
false.
?- oddlength([1]).
true.
?- evenlength([1,2]).
true.
?- oddlength([1,2]).
false.
?- evenlength([1,2,3]).
false.
?- oddlength([1,2,3]).
true.
참고 :
?- evenlength(Xs).
Xs = []
; Xs = [_A,_B]
; Xs = [_A,_B,_C,_D]
; Xs = [_A,_B,_C,_D,_E,_F]
...
?- oddlength(Xs).
Xs = [_A]
; Xs = [_A,_B,_C]
; Xs = [_A,_B,_C,_D,_E]
; Xs = [_A,_B,_C,_D,_E,_F,_G]
...
을 meta-predicatefoldl/4
및 Prolog lambdas을 사용하면 다음을 수행하면됩니다.
evenlength(Xs) :-
foldl(\_^E^O^(O is \E),Xs,1,1). % each item in `Xs` flips the "evenness flag"
샘플 사용
?- evenlength([]).
true.
?- evenlength([_]).
false.
?- evenlength([_,_]).
true.
?- evenlength([_,_,_]).
false.
?- evenlength([_,_,_,_]).
true.
은의 가장 일반적인 쿼리에 대해 잊지 말자!
?- evenlength(Xs).
Xs = []
; Xs = [_A,_B]
; Xs = [_A,_B,_C,_D]
; Xs = [_A,_B,_C,_D,_E,_F]
...
- 1. 프롤로그에서 이중 목록 확인
- 2. 프롤로그에서 목록 정렬
- 3. 프롤로그에서 목록 관리
- 4. 짝수 크기의 목록이 예상되는 곳에서 참조 찾기
- 5. 프롤로그에서 목록 및 재귀를 이해하십시오.
- 6. 목록 프롤로그에서 인접한 중복을 제거하십시오.
- 7. 키보드 크기의 영향을받는 목록
- 8. 프롤로그에서 재귀를 사용하여 데이터 목록 만들기
- 9. 프롤로그에서 언 바운드 목록 꼬리 가져 오기
- 10. 배열 "목록"을 읽고 프롤로그에서 어떻게 인쇄합니까?
- 11. 초기화되지 않은 목록 값을 프롤로그에서 자르지 않음
- 12. SWI 프롤로그에서 nth1 목록 연산 구현
- 13. 프롤로그에서 목록 순열에 액세스하는 방법은 무엇입니까?
- 14. 메뉴의 홀수/짝수 목록 항목 위치 지정
- 15. write.csv() 불규칙한 크기의 data.frames 목록
- 16. 배열 중간 크기의 변수 목록
- 17. 프롤로그에서 나누기
- 18. 프롤로그에서 계산
- 19. FSC 특정 크기의 목록 생성 확인
- 20. 만드는 법 동일한 크기의 목록 높이?
- 21. 연결된 목록 클래스 짝수 번호 목록에 대한 메서드
- 22. 프롤로그에서 별칭`(not)/1`
- 23. 프롤로그에서 슬래시 (/)는 무엇을합니까?
- 24. 프롤로그에서 SQL 변환기
- 25. 프롤로그에서 시간 비교
- 26. 프롤로그에서 '멤버 제거'기능 만들기
- 27. 프롤로그에서 이상한 연산자 (!)
- 28. 프롤로그에서 답변을 다시 전달
- 29. 프롤로그에서 부호 전파 알고리즘
- 30. 프롤로그에서 AND 연산자를 재정의
짝수 길이의 목록에 관심이 있습니다. – false