如何计算erlang中列表内容的长度?

如何计算erlang中列表内容的长度?,erlang,Erlang,例如:[你好,万维网,1,2,3]长度为18,包括万维网和广域网之间的空间 我试过: 字符串:透镜列表:展平[X | Y] 但它删除了空间 我想用它来做什么: 我正在创建一个函数,它将返回一个尽可能多的单词列表,但保持在指定长度以下 例如: -spec hello(list(string()), integer()) -> list(string()). 1> hello:limit_word(["Hello", "there my friend", "wassup!"],10).

例如:[你好,万维网,1,2,3]长度为18,包括万维网和广域网之间的空间

我试过: 字符串:透镜列表:展平[X | Y] 但它删除了空间

我想用它来做什么: 我正在创建一个函数,它将返回一个尽可能多的单词列表,但保持在指定长度以下

例如:

-spec hello(list(string()), integer()) -> list(string()).

1> hello:limit_word(["Hello", "there my friend", "wassup!"],10).                                      
["Hello"]
2> hello:limit_word(["Hello", "there my friend", "wassup!"],22). 
["Hello", "there my friend"]

整平并计算整个工程的长度:

1> L = ["hello","world wide","1","2","3"].
["hello","world wide","1","2","3"]
2> string:length(lists:flatten(L)).
18
您也可以将每个零件的长度相加:

3> lists:sum([length(S) || S <- L ]).
18
limit_word/2是导出到调用方的内容,与原始示例中的内容相同。它只调用limit_word/3函数,该函数需要一个额外的参数:一个当前总长度、大小和累计单词的元组,我们取列表的开头,将其长度添加到Size,如果总数小于Max,我们递归调用limit_word/3,传递NewSize和一个新词列表,新词作为其头部,现有词列表作为其尾部。但是如果NewSize超过了Max,我们将返回反向的Acc列表-反向的,因为我们通过在标题中添加新词来形成列表。它的工作原理与您预期的一样:

4> hello:limit_word(["Hello", "there my friend", "wassup!"],10).
["Hello"]
5> hello:limit_word(["Hello", "there my friend", "wassup!"],22).
["Hello","there my friend"]

更新:如果所有列表元素的总长度小于Max,我们就不会遇到真正的情况,因此final limit\u word/3子句通过返回反向累加器来处理空的输入列表。

展平并获取总长度很好:

1> L = ["hello","world wide","1","2","3"].
["hello","world wide","1","2","3"]
2> string:length(lists:flatten(L)).
18
您也可以将每个零件的长度相加:

3> lists:sum([length(S) || S <- L ]).
18
limit_word/2是导出到调用方的内容,与原始示例中的内容相同。它只调用limit_word/3函数,该函数需要一个额外的参数:一个当前总长度、大小和累计单词的元组,我们取列表的开头,将其长度添加到Size,如果总数小于Max,我们递归调用limit_word/3,传递NewSize和一个新词列表,新词作为其头部,现有词列表作为其尾部。但是如果NewSize超过了Max,我们将返回反向的Acc列表-反向的,因为我们通过在标题中添加新词来形成列表。它的工作原理与您预期的一样:

4> hello:limit_word(["Hello", "there my friend", "wassup!"],10).
["Hello"]
5> hello:limit_word(["Hello", "there my friend", "wassup!"],22).
["Hello","there my friend"]
更新:如果所有列表元素的总长度小于Max,我们就不会遇到真正的情况,因此final limit\u word/3子句通过返回反向累加器来处理空输入列表。

您可以使用:

您可以使用:


如果限制大于字长,则会出现错误。我可以修改函数中的哪些位以获取已从列表中删除的字?谢谢。处理字依赖于列表[H | T],其中H是列表开头的字,T是列表的其余部分。如果限制大于字长,出现错误。我可以修改函数中的哪些位以获取从列表中删除的单词?谢谢。处理单词依赖于列表[H | T],其中H是列表开头的单词,T是列表的其余部分。