2016-10-16 1 views
-2

Ich habe folgende Funktionen:Erlang: Syntaxfehler vor:“, "Wort"

search(DirName, Word) -> 
    NumberedFiles = list_numbered_files(DirName), 
    Words = make_filter_mapper(Word), 
    Index = mapreduce(NumberedFiles, Words, fun remove_duplicates/3), 
    dict:find(Word, Index). 

list_numbered_files(DirName) -> 
    {ok, Files} = file:list_dir(DirName), 
    FullFiles = [ filename:join(DirName, File) || File <- Files ], 
    Indices = lists:seq(1, length(Files)), 
    lists:zip(Indices, FullFiles). % {Index, FileName} tuples 

make_filter_mapper(MatchWord) -> 
    fun (_Index, FileName, Emit) -> 
    {ok, [Words]} = file:consult(FileName), %% <---- Line 20 
    lists:foreach(fun (Word) -> 
     case MatchWord == Word of 
     true -> Emit(Word, FileName); 
     false -> false 
     end 
    end, Words) 
    end. 

remove_duplicates(Word, FileNames, Emit) -> 
    UniqueFiles = sets:to_list(sets:from_list(FileNames)), 
    lists:foreach(fun (FileName) -> Emit(Word, FileName) end, UniqueFiles). 

Wenn jedoch i Suche aufrufen (Path_to_Dir, Word) erhalte ich:

Error in process <0.185.0> with exit value: 
{{badmatch,{error,{1,erl_parse,["syntax error before: ","wordinfile"]}}}, 
[{test,'-make_filter_mapper/1-fun-1-',4,[{file,"test.erl"},{line,20}]}]} 

Und ich Verstehen Sie nicht, warum. Irgendwelche Ideen?

Antwort

1

Die Variable Words stimmt mit dem Inhalt der Liste überein, die möglicherweise nicht nur aus einem Tupel besteht, sondern aus vielen. Versuchen Sie, {ok, Words} stattzu entsprechen.

+0

Obwohl das nicht der Fehler ist, den er bekommt. Der Aufruf von file: consult() gibt {error, ...}, nicht {ok, ...} zurück, daher gibt es einen Syntaxfehler in der Datei, die er liest. – RichardC

0

Neben der Tatsache, dass die function file:consult/1 eine Liste von mehreren Elementen zurückgeben kann, so dass Sie {ok,[Words]} (erwartet eine Liste mit einem Element = Wörter) von {ok,Words}, gibt es tatsächlich einen Syntaxfehler bedeutet, dass in der Datei, die Sie lesen ersetzen sollte, Es gibt einen Syntaxfehler. Denken Sie daran,

, dass die Datei nur dann gültig, erlang Begriffe enthalten sollte, von denen jede durch einen Punkt beendet. Der häufigste Fehler besteht darin, einen Punkt zu vergessen oder durch ein Komma zu ersetzen.

Verwandte Themen