저는 ProLog를 처음 사용하고 있으며 목록에 대한 재귀를 이해하는 데 어려움을 겪고 있습니다.SWI Prolog - 목록 재귀
나는이 연습에 붙어있다. 기본적으로 어휘가 주어진다면 나는 이탈리아 숫자의리스트를 영어 숫자로 변환 할 필요가있다.
이것은 내 KB입니다.
tran(uno, one).
tran(due, two).
tran(tre, three).
tran(quattro, four).
tran(cinque, five).
tran(sei, six).
tran(sette, seven).
tran(otto, eight).
tran(nove, nine).
listran(L,[]).
listran(L,[H|T]) :- tran(H,E), listran([E|L],T).
이 프로그램은 역순으로 번역 된 목록을 제공해야합니다. 그러나, 그것은 단지 내가 통과 할 때 사실를 출력합니다
?- listran(X, [uno, due, tre]).
내가 그것을 추적하기 위해 노력하고 끝이 제거에 보인다했습니다 ?? 내 번역 된 목록의 모든 요소. 이것이 추적 출력입니다.
[trace] ?- listran(X,[uno,due,tre]).
Call: (8) listran(_5566, [uno, due, tre]) ? creep
Call: (9) tran(uno, _5820) ? creep
Exit: (9) tran(uno, one) ? creep
Call: (9) listran([one|_5566], [due, tre]) ? creep
Call: (10) tran(due, _5826) ? creep
Exit: (10) tran(due, two) ? creep
Call: (10) listran([two, one|_5566], [tre]) ? creep
Call: (11) tran(tre, _5832) ? creep
Exit: (11) tran(tre, three) ? creep
Call: (11) listran([three, two, one|_5566], []) ? creep
Exit: (11) listran([three, two, one|_5566], []) ? creep
Exit: (10) listran([two, one|_5566], [tre]) ? creep
Exit: (9) listran([one|_5566], [due, tre]) ? creep
Exit: (8) listran(_5566, [uno, due, tre]) ? creep
true.
누군가가이 작은 문제를 이해하도록 도와 줄 수 있습니까?
미리 감사드립니다.