我正在学习Erlang以及如何使用列表,但是我遇到了问题。我正在编写一个用于解决数学问题的程序,例如Tot = X*Y*Z.
首先,我输入一个变量来设置要解决的问题数量,
inTestes(Tests) ->AmountOfTests = Tests.
现在要保存我的不同变量,我还做了一个记录:-record(specs,{x,y,z}).
,其中包含一个带有3个变量的连音号。
我尝试填充此连音号:inSpecs(X,Y,Z)-> #specs =[x=X,y=Y,z=Z].
但这不起作用。
我认为我需要使用lists:append(The variables here)->#specs{x=X,y=Y,z=Z}
之类的东西,但似乎并没有正确。
当我刚做inSpecs(X,Y,Z)-> Specs =[X,Y,Z].
时,会得到1个列表,例如[10,20,30]
如何根据AmountOfTests保存多个这样的列表?
有人可以给我一些指导吗?
答案 0 :(得分:3)
我尝试填充此小号:
inSpecs(X,Y,Z)-> #specs =[x=X,y=Y,z=Z].
但这不起作用
为什么您认为这应该起作用?您是否认为以下方法可以创建列表:
MyList = ! 3, 4; 5].
计算机编程需要精确的 语法-7个字符中的5个不是正确的。
请指向任何可以使用以下语法创建记录的书,网站或文档:
#specs =[x=X,y=Y,z=Z].
这是您可以做的:
-module(my).
-compile(export_all).
-record(specs, {x,y,z}).
inSpecs(X,Y,Z)-> #specs{x=X,y=Y,z=Z}.
在外壳中:
1> c(my).
my.erl:2: Warning: export_all flag enabled - all functions will be exported
{ok,my}
2> Record = my:inSpecs(10, 20, 30).
{specs,10,20,30}
3> rr("my.erl").
[specs]
4> Record.
#specs{x = 10,y = 20,z = 30}
5> Record#specs.x.
10
我刚做
inSpecs(X,Y,Z)-> Specs =[X,Y,Z]
时。我得到1个清单 示例[10,20,30]
如何根据 AmountOfTests?
假设AmountOfTests
等于3,inSpecs/3
应该返回什么?
回复评论:
在这里,您可以使用相同的数据创建三个规格:
-module(my).
-compile(export_all).
-record(specs, {x,y,z}).
inSpecs(X,Y,Z)-> #specs{x=X,y=Y,z=Z}.
create_specs(0) -> [];
create_specs(N) -> [inSpecs(1,2,3) | create_specs(N-1)].
在外壳中:
1> c(my).
my.erl:2: Warning: export_all flag enabled - all functions will be exported
{ok,my}
2> rr(my).
[specs]
3> Specs = my:create_specs(3).
[#specs{x = 1,y = 2,z = 3},
#specs{x = 1,y = 2,z = 3},
#specs{x = 1,y = 2,z = 3}]
或者,如果您在这样的列表中包含规格数据:
SpecData = [ [1,2,3], [12,13,14], [7,8,9] ].
然后您可以创建如下函数:
-module(my).
-compile(export_all).
-record(specs, {x,y,z}).
inSpecs(X,Y,Z)-> #specs{x=X,y=Y,z=Z}.
create_specs([]) -> [];
create_specs([ [X,Y,Z] | Tail]) ->
[inSpecs(X,Y,Z) | create_specs(Tail)].
在外壳中:
17> f().
ok
18> c(my).
my.erl:2: Warning: export_all flag enabled - all functions will be exported
{ok,my}
19> SpecData = [ [1,2,3], [12,13,14], [7,8,9] ].
[[1,2,3],[12,13,14],[7,8,9]]
20> Specs = my:create_specs(SpecData).
[#specs{x = 1,y = 2,z = 3},
#specs{x = 12,y = 13,z = 14},
#specs{x = 7,y = 8,z = 9}]
答案 1 :(得分:2)
似乎您正在尝试从列表中获取3个值并将其放入记录中。您可以使用模式匹配来实现。如果您知道要发送的列表中有3个值,则可以执行以下操作:
inTests( [X, Y, Z] ) ->
#specs{ x = X, y = Y, z = Z}.