2014-09-17 2 views
0

우리의 임무는 목록의 각 요소를 최대치로 나누는 normalize/1 함수를 작성하는 것이 었습니다.BIF와 목록을 사용한 Erlang 예외 오류 : maps

normalize(List) -> 
    Z = lists:max(List), 
    [ X/Z || X <- List]. 

가 지금은 정상화와 동일하게 수행 normalize2라는 함수를 작성해야/: 여기

지금까지 (대신 내 자신의 작성 기능, 나는이 최대를 찾는 일에 내장 사용) 내 코드입니다 그러나 1 개 사용 나열지도/2

normalize2(List) -> lists:map(fun normalize/1, List). 

터미널이 보여

TEST3 : normalize2 ([1,2,3,5]). ** 예외 오류 : 목록에 일치하는 함수 절이 없습니다. max (1) (lists.erl, 313) function test3 : normalize/1 (test3.erl, 85 줄) 목록에서 호출 : map/2 lists.erl 라인 1224)

UPDATE : normalize2 ([1 :

TEST3 : I 단자 나 쇼^find_max 사용

find_max([T]) -> 
    T; 
find_max([H,H1|T]) when H > H1-> 
    find_max([H,T]); 
find_max([_H,H1|T])-> 
    find_max([H1|T]). 

경우

을 Heres find_max/1 2,3,5]). ** 예외 오류 : function3과 일치하는 함수 절이 없습니다. test3 : find_max (1) (test3.erl, line 137) function test3 : normalize/1 (test3.erl, 84 줄) 목록에서 호출 : map/2 lists.erl, line 1224)

라인 137은 find_max ([T]) -> T이다. 줄 84는 Z = find_max (목록),

+0

normalize/1에서 자체 find_max/1 함수를 사용하면 동일한 오류가 표시되지만 "함수 절 일치 목록 : max (1)"대신 목록과 일치하는 함수 절이 없습니다. max (1) , 0). – Gabriele

답변

3

목록입니다. 목록에서 최대 반환 최대 값입니다. 이 함수의 인수는 목록이어야 함을 의미합니다.

목록을 호출 할 때 :지도는 각 목록 항목에 일부 기능 (귀하의 경우 'normailze')을 적용 함을 의미합니다. 그러나 목록 항목은 정수입니다. 그렇기 때문에 라인 Z=lists:max(List)이 예외를 던졌습니다 (변수 List는 실제로 목록이 아닙니다).

목록을 사용할 수 있습니다. 목록 이해력의 대체 문자로 사용할 수 있습니다. 이미 normalize/1에 지능형리스트를 사용하는 방법을 알아 낸 이후

normalize2(List) -> Z = lists:max(List), lists:map(fun(X) -> X/Z end, List). 
+0

내 입력이 [1,2,3,4]이고 find_max/1을 사용하면 [4]와 같은 대답을 얻을 수 있습니다. 위에서 썼던 normalize2에서 사용한 경우, 터미널에 다음과 같이 표시됩니다. test3 : normalize2 ([1,2,3,4]). ** 예외 오류 : 함수 목록에있는 test3 : '- normalize/1-lc $^0/1-0 -'(1) (test3.erl, 86 행) 과 일치하는 예외 조항 : map/2 (목록. erl, 1224 줄) – Gabriele

+0

1) find_max는 무엇입니까? 2) 어떻게 사용 했습니까? 3) 전체 테스트를 제공하면 더 나을 것입니다 .3.erl –

+0

답장을 보내 주셔서 감사합니다. 나는 당신의 대답을 투표 할 수 있었으면 좋겠지 만, 나는 아직 충분한 평판 포인트를 가지고 있지 않습니다. 다시 한번 감사드립니다. – Gabriele

1

의 종류는, 아마 lists:map/2를 사용하여 "다른"솔루션을 기록 할 점은 없습니다.

언제나 정신적 인 반사 작용을 발휘하여 즉시 lists:map/2의 사용을 아름다운 명단으로 대체하십시오!

+0

왜 그런가요? 조금이라도 읽기가 쉽기 때문에 또는 일부 정보가 누락 되었기 때문입니까? – Gabriele

+0

다른 이유는 없습니다. 'lists : map/2'는 이해력과 동일하며 익명의 함수를 쓰는 것을 피할 수 있습니다. – aronisstav