Why does my predicate return a lists of lists in prolog?

Viewed 31

So I have this predicate that is supposed to be returning a single list of elements. But it keeps returning lists of lists, and I'm not sure why.

english2133t([],[]).
english2133t([H|T], [R|E]):-
    translate([H],R), english2133t(T,E).

translate is just a mini database

translate("a", "4").
translate("b", "b").
translate("c", "<").
translate("c", "k").
translate("d", "|>").
translate("e", "3").
translate("f", "ph").
translate("g", "g").
translate("g", "9").
translate("h", "h").
translate("i", "1").
translate("j", "j").
translate("k", "|").
translate("l", "1").
translate("m", "/\\/\\").
translate("n", "/\\/").
translate("o", "0").
translate("p", "p").
translate("q", "q").
translate("r", "r").
translate("s", "5").
translate("t", "7").
translate("t", "+").
1 Answers

Just as you enclose H into a list to unify character codes, you need to use [R] so that the returned list of character code is unified with a list:

english2133t([],[]).
english2133t([H|T], [R|E]):-
    translate([H],[R]), english2133t(T,E).
Related