2013-04-19 7 views
5

Ich habe eine Aufgabe, eine Caesar-Chiffre in 7 Sprachen zu vervollständigen. Ich arbeite gerade daran, es Erlang zu vervollständigen. Ich war schon früher mit funktionalen Sprachen vertraut, daher verstehe ich im Allgemeinen, was ich tun muss. Ich habe speziell Probleme, die Verwendung der Foreach-Funktion in Erlang zu verstehen. Ich weiß, dass es verwendet wird, wenn du an einem Nebeneffekt interessiert bist, also bin ich mir ziemlich sicher, dass es der "richtige" Weg ist, um das zu tun, was ich will. Ich habe gelesen this answer und die Definition von foreach in der Erlang Sprachreferenz here. Ich bin jedoch immer noch ein wenig verwirrt und habe Probleme, die Syntax richtig zu machen.Verstehen und Verwenden von foreach in Erlang

-module(caesar). 
-export([main/2]). 

enc(Char,Key) when (Char >= $A) and (Char =< $Z) or 
       (Char >= $a) and (Char =< $z) -> 
Offset = $A + Char band 32, N = Char - Offset, 
Offset + (N + Key) rem 26; 

enc(Char, _Key) -> Char. 

encMsg(Msg, Key) -> 
    lists:map(fun(Char) -> enc(Char, Key) end, Msg). 

main(Message, Key) -> 

Encode = (Key), 
Decode = (-Key), 
Range = lists:seq(1,26), 

io:format("Message: : ~s~n", [Message]), 
Encrypted = encMsg(Message, Encode), 
Decrypted = encMsg(Encrypted, Decode), 

io:format("Encrypted: ~s~n", [Encrypted]), 
io:format("Decrypted: ~s~n", [Decrypted]), 
io:format("Solution: "). 
    %% Foreach belongs here, should execute Encrypted = encMsg(Message, N) where 
    %% N is the value in Range for each value in the list, and then print Encrypted. 

Antwort

10

Die Syntax ist ähnlich zu Listen: Karte, die Sie bereits geschrieben haben. Es braucht Spaß und die Liste. Der Spaß sollte ein Argument nehmen. Es wird aufgerufen, jeden Wert in der Liste zu übergeben.

lists:foreach(fun(N) -> 
         Encr = encMsg(Message, N), 
         io:format("Key:~p Encrypted: ~p",[N,Encr]) 
       end, Range). 
+0

Perfekt, klärte es für mich auf. Vielen Dank! – NickAbbey