2016-07-04 4 views
2

다음의 간단한 프로그램이 작동하지 않는 이유는 무엇입니까?프롤로그의 간단한 정사각형 프로그램

main :- 
    squares([1,2,3,4,5], L), 
    writeln(L). 

squares([H|T], Outl) :- 
    Sq is H*H, 
    squares(T, [Sq|Outl]). 
squares([], []). 

출력은 다음과 같습니다

( squares([H|T], Outl)에서) [Outl]Outl 교체
?- main. 
false. 

도움이되지 않습니다.

대신 =#=을 사용하거나 is을 사용하는 것도 도움이되지 않았습니다.

squares([], []) 대신 squares([], P)이 아니 었습니다.

, 당신은 당신이 목록 T.의 나머지의 계산 결과에 평방를 추가

squares([H|T],[Sq|Outl]):- 
    Sq is H*H, 
    squares(T,Outl). 

작성해야 당신이

squares([H|T],Outl):- 
    Sq is H*H, 
    squares(T,[Sq|Outl]). 

평방가 잘못이다 쓴 무슨

답변

1

+0

그것을인가 당신의 시스템에서 일하고 있습니까? 나에게주는 것은 :? squares ([1,2,3,4,5], L). L = [1 | _G1159]. – rnso

+0

예, 작동합니다. Out1을 Outl (문자 1이 아닌 문자 l)으로 변경해야합니다. 감사. – rnso

+0

감사합니다. 내 대답을 편집합니다. – joel76

4

이것은 maplist의 훌륭한 후보입니다.

하나 개의 요소 제곱 정의 :

squared(X, XX) :- XX #= X * X. 

그런 다음 maplist 적용

squared_list(L, LL) :- maplist(squared, L, LL). 

을 대신 is/2의 여기 #=을 사용함으로써, 행동의 더 관계입니다 :

| ?- squared_list([1,2,3], L). 

L = [1,4,9] 

yes 
| ?- squared_list(L, [1,4,9]). 

L = [1,2,3] ? ; 

(1 ms) no 
| ?-