2014-09-15 5 views
0

얼랭 (Erlang)을 처음 접해 보았습니다. 목록에서 가장 높은 양의 정수를 취하여이 값을 반환하는 보조 함수를 만들려고합니다. 이에 대한 나의 접근 방식은 코드에서, 다음과 같다 :얼랭 (Erlang) : 목록의 최대 요소를 확인하십시오.

-module(function). 
-export([normalize/1]). 

    normalize(List) -> normalize(List, 0). 

    normalize([], N) -> N;         
    ​normalize([H|T], N) when H > N -> normalize(T, H==N). 

내가 (가드에 문제가 있습니다 뭔가를 의심) 또한에 '기능/2가 정의되지 정상화'마지막 줄에 구문 오류가 계속 첫 번째 줄. 이 작업을 어떻게 수행합니까? 당신이 마지막 줄에 N (H==N)로 H를 비교하는 이유

+0

'H == N'은 true 또는 false를 반환하므로 코드가 'normalize (T, true)'를 호출하면 true가 N으로 'asigned'될 것입니다. 언 바운드, N은 사실에 묶일 것입니다.) - 당신이 원하는 것이 아닙니다. – 7stud

답변

4

잘 모르겠지만, 당신의 접근 방식을 해결하기 위해 필요한 모든 단지 HH==N을 교체하는 것입니다. 이렇게하면 [1,2,3]과 같은 목록에서는 작동하지만 가드 검사가 실패하므로 [3,1,2] 또는 [1,1,1]과 같은 목록에는 실패합니다.

마지막 사례를 수정하려면 H =< N과 같은 가드 검사와 함께 다른 함수 절을 추가해야합니다. 코드에 구축, 여기이 목록 lists:max/1의 최대 요소를 발견하는 기능이, 그리고 내가보기 엔 당신이 implementation 살펴보고 추천, 완전한 버전 그러나

-module(function). 
-export([normalize/1]). 

normalize(List) -> normalize(List, 0). 

normalize([], N) -> N; 
normalize([H|T], N) when H > N -> normalize(T, H); 
normalize([H|T], N) when H =< N -> normalize(T, N). 

이다; 정말 간단합니다.

또한 예제에는 목록 이해가 포함되어 있지 않으므로 질문 제목과 태그를 업데이트했습니다. 그리고 마지막으로 하나의 이름, normalize은 기능 목적에 다소 좋지 않습니다 :).

+0

** 구현을 살펴보십시오. 정말 간단합니다. ** 구현이 더 간단하다고 생각할 수 있습니다 : max ([Max | T]) -> max (Max, T)'. 기타 – 7stud

관련 문제