지난 8 시간 동안 Erlang을 사용 해왔고, 내 콘솔이 돌아 오는 예외 오류를 파악하려고 키보드에서 머리를 두 드렸습니다.Erlang의 예외 오류
나는 erlang을 배우기 위해 주사위 프로그램을 쓰고 있습니다. 나는 콘솔에서 erlang 인터프리터를 통해 호출 할 수 있기를 원합니다. 이 프로그램은 여러 개의 주사위를 받아들이고 값 목록을 생성합니다. 각 값은 1에서 6 사이 여야합니다.
문제 (무작위 엔지니어링)를 시도하고 수정하기 위해 수십 개의 개별적인 미세 변경 사항을주지는 않겠지 만 코드와 오류를 게시 할 것입니다.
근원 : 예상처럼
-module(dice2).
-export([d6/1]).
d6(1) ->
random:uniform(6);
d6(Numdice) ->
Result = [],
d6(Numdice, [Result]).
d6(0, [Finalresult]) ->
{ok, [Finalresult]};
d6(Numdice, [Result]) ->
d6(Numdice - 1, [random:uniform(6) | Result]).
내가 지금처럼 내 콘솔에서 프로그램을 실행 ... dice2:d6(1).
... 나는 한 여섯 사이의 임의의 번호를 . 나는 다음과 같은 예외가 인수로보다 높은 숫자 ...
**exception error: no function clause matching dice2:d6(1, [4|3])
와 동일한 기능을 실행할 때 그러나 ... 나는 일치하는 주장하지만 돈과 기능이없는 II를 알고 가변 인수를 가진 함수를 쓰는 방법을 알았고 변수 숫자을 인수로 사용합니다.
나는 .... 그래서 같은 질문에d6(Numdice, [Result]) ->
Newresult = [random:uniform(6) | Result],
d6(Numdice - 1, Newresult).
을 기능을 수정 시도 ...하지만 난 기본적으로 동일한 오류가 발생했습니다. 아무도 여기서 무슨 일이 일어나는 지 알아?
당신의 솔루션은 아름답게 작동했고 제 실수를 이해하는 데 도움이되었습니다. 나는 기능적 패러다임에 익숙하지 않아 흡수 할 것이 많다. 빈 목록으로 d6 (Numdice, Result)을 호출하여 혼란 스러웠던 곳에서 리 바인드 할 수 없기 때문에 새 호출은 빈 목록에 대해 d6에 대한 매개 변수 중 하나와 만 일치 할 수있게되었습니다 범위에있는 변수. 바인딩 규칙이 주어진 함수 내에서만 * 다음 호출 [롤스 아이] 전에 적용된다는 사실을 잊어 버렸을 것입니다. 일치하는 문제에 빠졌고 요소 길이를 잊어 버렸습니다. 어쨌든 내 질문에 답변 해 주셔서 감사합니다. – Jim
대답을 투표 할 수는 있지만 대답을 수락 할 수 있다는 것을 잊지 마시기 바랍니다 :) –
단지 완성을 위해 :'d6 (1)'은 숫자를 제공합니다. 'd6 (2)'는 다른 버그를 유발할 수있는'{ok, [Value1, Value2]}'를 제공합니다. – ZeissS