我尝试在Erlang中实现一个split方法,该方法应该将一个字符串(如"i am on the mountain top"
)拆分为一个列表(如["i","am","on","the","mountain","top"]
)。
下面是我的代码(exercise.erl):
-module(exercise).
-import(oi,[read/1]).
-export([split/4]).
split(Text,_,Result,_) when Text == [] -> Result;
split([Head|Tail],Separator,Result,WordSummer) when Head == Separator ->
split(Tail,Separator,[Result|lists:flatten(WordSummer)],[]);
split([Head|Tail],Separator,Result,WordSummer) ->
split(Tail,Separator,Result,[WordSummer|Head]).
我遇到的问题是,当调用我的导出函数时,我得到以下错误:
9> c(exercise).
{ok,exercise}
10> exercise:split("sdffdgfdg dgdfgfg dgdfg dgdfgd dfgdfgdfgtrty hghfgh",$ ,[],[]).
** exception error: no function clause matching lists:do_flatten(103,[]) (lists.erl, line 627)
in function lists:do_flatten/2 (lists.erl, line 628)
in call from exercise:split/4 (exercise.erl, line 9)
11>
我该如何解决这个问题?
1条答案
按热度按时间uyhoqukh1#
两件事:
1.最后一行中的
[WordSummer|Head]
创建了一个不正确的列表,因为Head
是一个整数(输入字符串的一个字符)。这就是您看到的错误。您可能是指[WordSummer, Head]
。[Result|lists:flatten(WordSummer)]
正在建立巢状清单,而非字串清单。若要将一个项目附加至清单,请使用++
并在清单的右侧换行:Result ++ [lists:flatten(WordSummer)]
最终代码:
测试项目:
仍然有一个错误,最后一段被忽略了。我会让你弄清楚的(提示:您需要在函数的第一个子句中考虑
WordSummer
)。