Functional programming 二进制字符串erlang的第一个字

Functional programming 二进制字符串erlang的第一个字,functional-programming,erlang,pattern-matching,Functional Programming,Erlang,Pattern Matching,我需要这样做,它应该返回不确定为什么不想使用binary:split。这里有一个实现这一点的方法,但我真的不喜欢它 first_word_bin(Bin) -> Len = length_till_space(Bin, 0), <<Bin:Len/binary>>. length_till_space(<<>>, Num) -> Num; length_till_space(<<$\s, _/binary&

我需要这样做,它应该返回不确定为什么不想使用binary:split。这里有一个实现这一点的方法,但我真的不喜欢它

first_word_bin(Bin) ->
    Len = length_till_space(Bin, 0),
    <<Bin:Len/binary>>.

length_till_space(<<>>, Num) -> Num;
length_till_space(<<$\s, _/binary>>, Num) -> Num;
length_till_space(<<_:1/binary, Tl/binary>>, Num) ->
    length_till_space(Tl, Num + 1).
first\u word\u bin(bin)->
Len=到空间的长度(Bin,0),
.
长度直到空间(,Num)->Num;
长度直到空间(,Num)->Num;
长度直到空格(,Num)->
到空间的长度(Tl,Num+1)。
但是,如果二进制文件开头有空格,例如

那么结果就是,如果在开始时没有空格,它将是。这可以通过事先修剪起始空格来解决,但是您可以使用相同的方法

所以我们使用length_-till_空间来获得字符的数量,直到它到达一个空格。第一个案例检查二进制文件是否为空,第二个案例检查二进制文件的头部是否为$\s(空格),最后一个案例只是执行尾部调用并递增数字

最后,我们只需从二进制文件中获取前X个字符并返回它。

虽然s是正确的,但有一个简单的解决方案(包括前导空格的修剪):

first\u word\u bin(bin)->
第一个单词是宾语。
第一个单词是宾语(,Acc)->Acc;
第一个单词是宾语(,Acc)->Acc;
第一个单词是宾语(,Acc)->
第一个单词是bin(bin,)。
ltrim()->ltrim(Bin);
ltrim(Bin)->Bin。

您的查找规则是什么?@user2513522,根据这里的答案:是的,这更好
first_word_bin(Bin) ->
    first_word_bin(ltrim(Bin), <<>>).

first_word_bin(<<>>, Acc) -> Acc;
first_word_bin(<<$\s, _/binary>>, Acc) -> Acc;
first_word_bin(<<X, Bin/binary>>, Acc) ->
    first_word_bin(Bin, <<Acc/binary, X>>).

ltrim(<<$\s, Bin/binary>>) -> ltrim(Bin);
ltrim(Bin) -> Bin.