:- use_module(library(lists), [reverse/2]). :- use_module(contestlib, [write_elements/1, writeN/2]). triangle(Chars) :- length(Chars,Spaces), Chars = [Middle|RestChars], End = [], Spaces1 is 2*Spaces, part1(Middle,End,RestChars,Spaces1). triangle(Chars) :- length(Chars,Spaces), reverse(Chars,[_|Post]), part2(Post,5,Spaces). triangle(_). part1(Middle,End,RestChars,Spaces) :- writeN(Spaces,' '), reverse_write_elements(End), write_elements([Middle|End]), nl, Spaces1 is Spaces - 1, RestChars = [NewMiddle|NewRestChars], part1(NewMiddle,[Middle|End],NewRestChars,Spaces1). part2([X|Cs],Len,Spaces) :- writeN(Spaces,' '), reverse_write_elements(Cs), writeN(Len,X), write_elements(Cs), nl, Spaces1 is Spaces - 1, Len1 is Len + 4, part2(Cs,Len1,Spaces1). reverse_write_elements(L) :- reverse(L,RL), write_elements(RL).