2013-03-27 2 views
2

다음 코드 스 니펫 중 어느 것이 더 좋습니까? 그리고 왜? 그 check_num (N)을 가정 리스트 보 완성과 상위 순서 함수

check_number(X) -> 
    io:format("~w~n", [[N || N <- lists:seq(1,X), check_num(N)]]). 

check_number(X) ->                  
    case lists:filter(fun(Y) -> check_num(Y) end, lists:seq(1,X)) of     
     [] -> empty;    
     List -> io:format("~w~n", [List]) 
    end. 

또는

는 술어이다.

+0

나는 Erlang 코드라고 생각한다. 적절한 태그를 사용하십시오. –

+0

check_num 함수는 무엇을합니까? –

+0

예 Erlang 코드이며 check_num은 술어입니다. – coffeMug

답변

6

두 번째 기능이 첫 번째 기능과 동일하지 않습니다.

check_number(X) -> 
    io:format("~w~n", [lists:filter(fun check_num/1, lists:seq(1,X))]). 

당신이 훨씬 더 큰 보이지 않는 볼 수 있듯이 : 당신은 그런 번째와 동일한 것이 첫 번째 함수를 작성할 수 있습니다. 그리고 사용하는 것은 독점적으로 당신과 동료의 아름다움에 달려 있습니다.

2

check_number/1 님의 기능은 무엇입니까? 첫번째 복귀emptycheck_num/1 만족에는 정수가없는 경우와 같은 정수 동안 그것을 인쇄 그들의 목록 복귀ok가 있는지 (io:format의 리턴 값). 두 번째 것은 항상 이 비어 있더라도 목록을 인쇄하고 ok을 반환합니다.

값을 인쇄하고 반환하는 것은 완전히 다른 두 가지 사항입니다. 따라서 귀하의 기능이 무엇을 해야하는지에 대한 제 질문입니다.

어떤 대안이 여기에서 선택의 순전히 성냥이고 당신은 당신이 더 낫게보기 느끼는 것을 선택할 수있다. List comprehensions은 종종지도와 필터를 표현하는 간결한 방법을 제공합니다.

+0

안녕하세요 로버트, check_num/1은 정수를 찾으실 것입니다 : "48은 재미있는 숫자입니다 .1을 더하면 완벽한 사각형입니다 .2로 나누고 1을 더하면 25가됩니다. 또 다른 완벽한 사각형입니다.이 속성을 가진 다음 정수는 무엇입니까? " 제 질문은 주로 HOF와 List comprehensions의 차이점을 명확히하기위한 것이 었습니다. – coffeMug

+0

OK, gotcha. 비 기능적인 배경에서 오는 많은 사람들이 값을 반환하는 것과 값을 인쇄하는 것을 혼동하는 것으로 조금 걱정했습니다. 특히 셸이 반환 값을 인쇄 할 때 더 많이 차이를 숨기는 경향이 있습니다. – rvirding