2010-08-12 6 views
3

안녕하세요. 첫 번째 글입니다. 안녕하세요. 그래서 나는 방금 erlang을 시작하고 나는 아직 태클하는 방법을 모르는 문제에 부딪쳤다.ERLANG - 목록을 하위 목록으로 분할

그래서 나는

<<56, 23, 67, 34, 45, 78, 01, 54, 67, 87, 45, 53, 01, 34, 56, 78>> 

내 목표의 형태로 01

의 경우에 따라 (또는 더 효율적인 경우 바이너리) 하위 목록으로 분할하는 것입니다 잡하고 바이너리가

<<56, 23, 67, 34, 45, 78>> <<54, 67, 87, 45, 53>> <<34, 56, 78>> 

- 또는

[[56, 23, 67, 34, 45, 78], [54, 67, 87, 45, 53], [34, 56, 78]] 
: 예는 위처럼 보이는 나올한다

01은 분리 태그이므로 최종 출력에 포함될 필요가 없습니다.

나는 같은 뭔가를 시도 : (더 나은 방법이 있는지 무시하십시오)

parse1([]) -> []; 
parse1(1) -> io:format("SOHSOHSOHSOHSOHSSOHSOHS"); 
parse1(Reply) -> parse1({Reply, []}); 
parse1({Reply, nxtParse}) -> 
    [H | T] = Reply, 
    case H of 
     _ when H > 1 -> 
      [H | nxtParse], 
       io:format("Reply 1 = ~p~n", [H]), 
      parse1({T, nxtParse}); 
     _ when H == 1 -> 
      io:format("SOHSOHSOHSOHSOHSSOHSOHS"); 

     [] -> 
      ok 

    end. 

이 전혀 정말 깨끗하지이며 모든 것을 프로의 쓰기에서 유사하지 않습니다. Im 확실한 악은 누군가가 저를 안으로 단서를내는 때 나의 머리 "duh"를 강타한다.

나는 1 개의 해결책 이상 확실히있다, 그러나 무엇이 최상인지 깨닫는다. ERL에는 BIF가 너무 많아서 일을 처리하는 방법이있는 것 같아요. 내 길을 찾아야합니다. R 14A 호와 함께 오는 도움말 사람 -B

답변

8

에 대한

감사합니다, 얼랑 지금과 같은 작업을 처리하기 위해 binary 모듈을 포함 :

1> Bin = <<56, 23, 67, 34, 45, 78, 01, 54, 67, 87, 45, 53, 01, 34, 56, 78>>. 
<<56,23,67,34,45,78,1,54,67,87,45,53,1,34,56,78>> 
2> binary:split(Bin, <<01>>, [global]). 
[<<56,23,67,34,45,78>>,<<"6CW-5">>,<<"\"8N">>] 

참고가 (<<"6CW-5">><<"\"8N">>) 잘못된 보이지만, 기본 표현은 맞고 문자열은 바이너리를 출력하는 방법을 알아 내려고하는 VM입니다. 원시 형식으로 출력 할 때 동일한 호출을 참조하십시오.

3> io:format("~w~n", [binary:split(Bin, <<01>>, [global])]). 
[<<56,23,67,34,45,78>>,<<54,67,87,45,53>>,<<34,56,78>>] 
ok 
+1

+1 나는 Erlang을 좋아합니다 –

+0

고맙습니다! – BAR

관련 문제