% 基本版 tr(_, _, [], []). tr(A, B, [X|Xs], [Y|Ys]) :- (nth0(N, A, X) -> nth0(N, B, Y); Y = X), tr(A, B, Xs, Ys). % 拡張版 tr2(A, B, X, Y) :- expand(A, A1), expand(B, B1), tr(A1, B1, X, Y). expand([], []). expand([X1,0'-,X2|Xs], Ys) :- !, numlist(X1, X2, L), append(L, L1, Ys), expand(Xs, L1). expand([X|Xs], [X|Ys]) :- expand(Xs, Ys). :- tr("qwertyuiop", "QWERTYUIOP", "typewriter", X1), string_to_list(S1, X1), writeln(S1), tr2("a-z", "A-Z", "typewriter", X2), string_to_list(S2, X2), writeln(S2).