2012-01-12 2 views
3

나는 술어 m(L,L)을 가지고 있으며, 나는 그것이 취한 목록을 반환하기를 원합니다. 코드는 이것이다 :프롤로그 목록을 처리하는 방법은 무엇입니까?

m([],[]). 
m([H|T],[H|L]) :- m(T,L). 

나는이 예제를 사용하려고 :

m([1,2,3,4,5,6,7,8,9,10],L) 

내가 대답으로이 수는 :
L = [1, 2, 3, 4, 5, 6, 7, 8, 9|...]. 

(내가 발견하는 경우 I 더 적은 요소로 확인해보십시오.) 왜 이런 일이 일어나고 목록은 완성되지 않았습니까?

어떻게 이것을 피할 수 있습니까?

죄송합니다. 정말 바보 같은 질문이지만 웹을 검색했기 때문에 이해하는 데 도움이되는 설명서를 찾을 수 없습니다. 감사합니다!

+0

다음에 코드를 포맷하십시오. –

+1

프로그램이 올 바릅니다. Prolog 환경에서 표시 목적으로 긴 목록을 줄이는 서식 지정 문제처럼 보입니다. – dasblinkenlight

답변

4

목록이 완성되었습니다. 시각화를 위해 출력물이 잘려나갑니다. 목록을 인쇄하는 술어를 작성하면 완료되었음을 알 수 있습니다. SWI 프롤로그를 사용하고있는 것 같습니다. this link에서 디스플레이 설정을 변경하는 방법을 확인할 수 있습니다.

+0

고맙습니다. 당신은 완전히 옳았습니다. 그것은 SWI 프롤로그의 것이 었습니다. – user1146636

+0

문제는 없습니다. 시간 제한이 만료되면 대답을 수락하십시오! –

0

디버거와 같이 최상위 쿼리/대답 루프는 모두 긴 복합 용어를 줄입니다. 이는 끝없는 출력 페이지를 피하기 위해이 작업을 수행합니다. 실제로, 이들은 인수로 option-list를 취하는 write_term/3을 사용하여 씁니다. Prolog 최상위 레벨이 인쇄하는 응답의 옵션 목록은 prolog-flag toplevel_print_options에 있고, 디버거에 대한 옵션 목록은 debugger_print_options에 있습니다. 처음 두 값이 아래 있습니다

?- current_prolog_flag(toplevel_print_options, X). 

X = [quoted(true), portray(true), max_depth(10), spacing(next_argument)]. 

기본 설정을 변경하려면 : 이 프롤로그 개인 초기화 파일에 set_prolog_flag/2 지시문을 추가합니다 (PlInitialisation 참조) 기본에게 위에서 언급 한 프롤로그 플래그를 변경합니다.

그냥 이런 식으로 settings -> user init file ... ->

변경 MAX_DEPTH (10)로 이동 :

또한
:- set_prolog_flag(toplevel_print_options, 
      [quoted(true), portray(true), max_depth(100)]). 

가 다른 옵션은 이미 주석 PlInitialisation 파일에 사용할 수 있습니다.