【发布时间】:2011-02-15 07:26:04
【问题描述】:
所以在过去的八小时里我一直在使用 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).
...我得到一个 1 到 6 之间的随机数,如预期的那样。 但是,当我以任何大于 1 的数字作为参数运行相同的函数时,我得到以下异常...
**异常错误:没有函数子句匹配 dice2:d6(1, [4|3])
...我知道 II 没有具有匹配参数的函数,但我不知道如何编写具有可变参数和可变参数的函数 number。
我尝试像这样修改有问题的函数....
d6(Numdice, [Result]) ->
Newresult = [random:uniform(6) | Result],
d6(Numdice - 1, Newresult).
...但我得到了基本相同的错误。有人知道这里发生了什么吗?
【问题讨论】: