40 lines
841 B
Text
40 lines
841 B
Text
main =>
|
|
S = "The quick brown fox jumped over the lazy dog",
|
|
cypher(S,E), % encrypt
|
|
println(E),
|
|
|
|
cypher(D, E), % decrypt
|
|
println(D),
|
|
|
|
S == D,
|
|
println(ok).
|
|
|
|
cypher(O, S) :-
|
|
nonvar(O),
|
|
var(S),
|
|
sub_chars(O,S).
|
|
cypher(O, S) :-
|
|
nonvar(S),
|
|
var(O),
|
|
sub_chars(O,S).
|
|
|
|
base("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ").
|
|
subs("VsciBjedgrzyHalvXZKtUPumGfIwJxqOCFRApnDhQWob LkESYMTN").
|
|
|
|
sub_chars(Original,Subbed) :-
|
|
base(Base),
|
|
subs(Subs),
|
|
maplist($sub_char(Base,Subs),Original,Subbed).
|
|
|
|
sub_char([Co|_],[Cs|_],Co,Cs) :- !.
|
|
sub_char([_|To],[_|Ts], Co, Cs) :- sub_char(To,Ts,Co,Cs).
|
|
|
|
maplist(Goal, List1, List2) :-
|
|
maplist_(List1, List2, Goal).
|
|
|
|
maplist_([], X, _) :- X = [].
|
|
maplist_([Elem1|Tail1],
|
|
[Elem2|Tail2],
|
|
Goal) :-
|
|
call(Goal, Elem1, Elem2),
|
|
maplist_(Tail1, Tail2, Goal).
|