开发者

Prolog: converting atom to new atom

I have a problem with predicate which works in that way that it takes list of atoms:

nopolfont([to,jest,tekśćik,'!'],L).

and in result

L = [to,jest,tekscik,'!'].

I have problem with make_swap and swap predicates. So far I have:

k(ś,s).
k(ą,a).
% etc.
swap(X,W) :- name(X,P), k(P,Y), !, name(Y开发者_如何学JAVA,W).
swap(X,X).

make_swap(A,W)
  :- atom(A),!,
     name(A,L),
     swap(L,NL),
     name(W,NL).

nopolfont([],[]).
nopolfont([H|T],[NH|S]) :- make_swap(H,NH), nopolfont(T,S).

Is there any elegant way to do this?


This is also quite elegant:

polish_char_replacer(X, Y) :-
    k(X, Y),
    !.
polish_char_replacer(X, X).

nopolfont(Atoms1, Atoms2) :-
    maplist(replace(polish_char_replacer), Atoms1, Atoms2).

replace(Goal, Atom1, Atom2) :-
    atom_chars(Atom1, Chars1),
    maplist(Goal, Chars1, Chars2),
    atom_chars(Atom2, Chars2).


Probably as elegant as it can get:

k(ś,s).
k(ą,a).

swap(X,W) :- name(P,[X]), k(P,Y), !, name(Y,[W]).
swap(X,X).

list_swap([], []).
list_swap([H|T], [W|S]) :-
    swap(H, W),
    list_swap(T, S).

atom_swap(A,W) :-
    atom(A), !,
    name(A, L),
    list_swap(L,S),
    name(W, S).

nopolfont([],[]).
nopolfont([H|T],[NH|S]) :-
    atom_swap(H,NH),
    nopolfont(T,S).

Also, obviously define this, to get the expected result, but I assume this is in the % etc

k(ć, c).
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜