Erlang:在“,”之前的语法错误&引用;字;
我有以下职能:Erlang:在“,”之前的语法错误&引用;字;,erlang,syntax-error,Erlang,Syntax Error,我有以下职能: 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) ->
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).
搜索(DirName,Word)->
NumberedFiles=列出编号的文件(DirName),
Words=make\u filter\u mapper(Word),
Index=mapreduce(NumberedFiles,Words,fun删除重复项/3),
dict:查找(单词、索引)。
列出编号的文件(目录名)->
{ok,Files}=file:list_dir(DirName),
FullFiles=[filename:join(DirName,File)| | File
乐趣(_索引、文件名、发出)->
{ok,[Words]}=file:consult(文件名),%%
大小写匹配词==单词
true->Emit(字、文件名);
假->假
结束
(完,字)
结束。
删除重复项(字、文件名、发射)->
UniqueFiles=set:to_列表(set:from_列表(文件名)),
列表:foreach(fun(FileName)->Emit(Word,FileName)end,UniqueFiles)。
但是,当我调用search(Path_to_Dir,Word)时,我得到:
退出值为的过程中出现错误:
{{badmatch,{error,{1,erl_parse,[“前面的语法错误:”,“wordinfle”]}},
[{test'-make_filter_mapper/1-fun-1-',4,[{file,“test.erl”},{line,20}]}
我不明白为什么。有什么想法吗?这个
Words
变量将匹配列表的内容,它可能不仅仅是一个元组,而且是其中的许多元组。尝试匹配{ok,Words}
而不是{ok,[Words]}
除了函数文件:consult/1
可能返回多个元素的列表,因此您应该将{ok,[Words]}
替换为{ok,Words}
(需要一个元素=单词的列表),它实际上返回一个语法错误,这意味着您正在读取的文件中存在语法错误
请记住,文件应该只包含有效的erlang术语,每个术语都以一个点结尾。最常见的错误是忘记一个点或用逗号替换它。尽管这不是他遇到的错误。对file:consult()的调用返回{error,},而不是{ok,},因此他正在读取的文件中存在语法错误。
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}]}]}