当前位置:  开发笔记 > 编程语言 > 正文

返回Erlang中的元音列表

如何解决《返回Erlang中的元音列表》经验,为你挑选了1个好方法。

我在Erlang中遇到一个小问题.我想返回一个字符串的所有元音的列表.例如:

vowels:conditional("AGGEHA").
["A","E","A"]

这是建议的代码:

-module(vowels).
-compile([export_all]).

isvowel('') -> false;
isvowel(C) -> if
                  C =:= "A" -> true;
                  C =:= "E" -> true;
                  C =:= "I" -> true;
                  C =:= "O" -> true;
                  C =:= "U" -> true;
                  true -> false
              end.

conditional([]) -> [];
conditional([A|T]) -> case isvowel(A) of
                          true -> [A] ++ conditional(T);
                          false -> [1] ++ conditional(T)
                      end.

问题是当我使用该conditional函数时,它总是返回false(或者在这种情况下,根据字符串的长度返回1的列表(我将其用作调试器)).有谁知道如何解决这个问题?



1> Steve Vinosk..:

您可以使用标准lists:filter/2函数或列表推导,以及使用lists:member/2函数来确定字符是否是元音:

conditional(String) ->
    lists:filter(fun(C) -> lists:member(C, [$A,$E,$I,$O,$U]) end, String).

要么

conditional(String) ->
    [C || C <- String, lists:member(C, [$A,$E,$I,$O,$U])].

给出你的示例输入,"AGGEHA"这两个都返回字符列表"AEA",但如果你真的希望它们将每个元音作为一个字符串返回,["A","E","A"]就像你已经显示的那样,只需将返回的字符放在一个列表中,最简单的方法是使用列表解析:

conditional(String) ->
    [[C] || C <- String, lists:member(C, [$A,$E,$I,$O,$U])].

通过该更改,您将获得所请求的原始结果:

1> vowels:conditional("AGGEHA").
["A","E","A"]

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有