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}]}]}