Rel*_*lla 11 arrays variables programming-languages list lazy-evaluation
哪种语言很聪明才能理解variable a = 0 , 20, ..., 300?所以你可以很容易地创建数组,它给出了步骤开始var last var(或者,更好的没有最后一个变量(一个无限数组)),而不仅仅是数字(甚至复杂的数字和自定义结构,如Sedenion,你可能会定义在你的拥有一个班级或其他......)
重点是,找到一种可用于某种语言的语言或算法,这种语言可以解释你给出的变量数组(或变量的参数)如何变化的规律.并使用该法则构成一个结构,您可以从中获得任何变量.
对于每个人 - 您提供的示例对所有初学者都非常有帮助.同时也是构建这种"智能阵列"课程所需的基本知识.所以,非常感谢您的热心帮助.
所有可能的规则可能包括一些需要评估一些/所有现有成员以生成第n个成员的规则.
所以这是一个很难的问题.而且我认为那种"天生"的语言很适合玩耍,希望不仅适用于数学家.
Joh*_*iss 35
哈斯克尔:
Prelude> let a=[0,20..300]
Prelude> a
[0,20,40,60,80,100,120,140,160,180,200,220,240,260,280,300]
Run Code Online (Sandbox Code Playgroud)
顺便说一句:无限列表也是可能的:
Prelude> let a=[0,20..]
Prelude> take 20 a
[0,20,40,60,80,100,120,140,160,180,200,220,240,260,280,300,320,340,360,380]
Run Code Online (Sandbox Code Playgroud)
Str*_*ger 10
F#:
> let a = [|0..20..300|];;
val a : int [] =
[|0; 20; 40; 60; 80; 100; 120; 140; 160; 180; 200; 220; 240; 260; 280; 300|]
Run Code Online (Sandbox Code Playgroud)
复杂的数字:
let c1 = Complex.Create( 0.0, 0.0)
let c2 = Complex.Create(10.0, 10.0)
let a = [|c1..c2|]
val a : Complex [] =
[|0r+0i; 1r+0i; 2r+0i; 3r+0i; 4r+0i; 5r+0i; 6r+0i; 7r+0i; 8r+0i; 9r+0i; 10r+0i|]
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它只增加了实部.
如果步骤也是一个复数,它将增加实部和虚部,直到last var达到实部:
let step = Complex.Create(2.0, 1.0)
let a = [|c1..step..c2|]
val a: Complex [] =
[|0r+0i; 2r+1i; 4r+2i; 6r+3i; 8r+4i; 10r+5i|]
Run Code Online (Sandbox Code Playgroud)
请注意,如果此行为与您的需求不匹配,您仍然可以重载(..)和(.. ..)运算符.例如,你想要它增加虚部而不是实部:
let (..) (c1:Complex) (c2:Complex) =
seq {
for i in 0..int(c2.i-c1.i) do
yield Complex.Create(c1.r, c1.i + float i)
}
let a = [|c1..c2|]
val a : Complex [] =
[|0r+0i; 0r+1i; 0r+2i; 0r+3i; 0r+4i; 0r+5i; 0r+6i; 0r+7i; 0r+8i; 0r+9i; 0r+10i|]
Run Code Online (Sandbox Code Playgroud)
等待...
print range(0, 320, 20)
Run Code Online (Sandbox Code Playgroud)
给
[0, 20, 40, 60, 80, 100, 120, 140, 160, 180, 200, 220, 240, 260, 280, 300]
评论的道具(我知道有一个更简洁的方式:P)