나는 Prolog를 처음 사용하며 목록의 모든 숫자와 하위 목록을 제곱하는 일종의 깊은 사각형 조건부를 구현하려고합니다. 나는 일종의 작동 코드를 썼다. 그러나 그것이 나에게 내가 기대 한 결과를주지 못했다.maplist를 사용하지 않고 sublist Prolog를 포함한리스트의 모든 멤버를
번호 :
dsquare([],S).
dsquare([H|T],[R|S]):- number(H), dsquare(T,S), R is H*H, !.
dsquare([H|T],S):- isList(H), dsquare(H,S).
dsquare([H|T],[R|S]) :- dsquare(T,S), R = H, !.
전류 출력 :
2?- dsquare([[2],4,a],X).
X = [4| _VDHV] ;
X = [[2], 16, a| _VDNM] ;
fail.
예상 출력 : 또한
X = [4] 16 A]
나는 왜 그걸 알고 싶었어. 제 출력물에 '_VDHV'와 '_VDNM'이 표시됩니다. 도움을 주시면 감사하겠습니다.
편집 :
dsquare([],[]).
dsquare([H|T],[R|S]):- number(H), R is H*H, dsquare(T,S).
dsquare([H|T],[R|S]):- isList(H), dsquare(H,R), dsquare(T,S).
dsquare([H|T],[R|S]) :- R=H, dsquare(T,S).
는하지만 얻을 출력은 다음과 같습니다 : 나는 내 코드를 업데이트 있도록 확인
13?- dsquare([a,3,[[2]],b,4],X).
X = [a, 9, [[4]], b, 16] ;
X = [a, 9, [[4]], b, 4] ;
X = [a, 9, [[2]], b, 16] ;
X = [a, 9, [[2]], b, 4] ;
X = [a, 9, [[2]], b, 16] ;
X = [a, 9, [[2]], b, 4] ;
X = [a, 9, [[2]], b, 16] ;
X = [a, 9, [[2]], b, 4] ;
X = [a, 3, [[4]], b, 16] ;
X = [a, 3, [[4]], b, 4] ;
X = [a, 3, [[2]], b, 16] ;
X = [a, 3, [[2]], b, 4] ;
X = [a, 3, [[2]], b, 16] ;
X = [a, 3, [[2]], b, 4] ;
X = [a, 3, [[2]], b, 16] ;
X = [a, 3, [[2]], b, 4] ;
fail.
나는 너무 많은 결과를 얻는 방법 단서가 없다.
편집 마침내 작업 솔루션은
dsquare([],[]).
dsquare([H|T],[R|S]) :- number(H), !, R is H*H, dsquare(T,S).
dsquare([H|T],[R|S]) :- isList(H), !, dsquare(H,R), dsquare(T,S).
dsquare([H|T],[H|S]) :- dsquare(T,S).
@CapelliC : 실행을 위해 프로그램을 다시 시작해야했습니다. –
@Nicholas Carey : 당신의 설명이 많은 도움이되었습니다. –