哪种语言很聪明才能理解variable a = 0 , 20, ..., 300
?所以你可以很容易地创建数组,它给出了步骤开始var last var(或者,更好的没有最后一个变量(一个无限数组))而不仅仅是数字(甚至是复数和自定义结构,如Sedenion's你会可能在你自己定义为一个类或其他什么......)
重点是,找到一种可用于某种语言的语言或算法,这种语言可以解释你给出的变量数组(或变量的参数)如何变化的规律。并使用该法律构成一个结构,您可以从中获得任何变量。
对每个人而言 - 您提供的示例对所有初学者都非常有帮助。同时也是构建这种“智能阵列”课程所需的基本知识。所以,非常感谢你的热心帮助。
所有可能的规则可能包括一些 这需要评估一些/所有 现有成员生成第n个 构件。
所以这是一个很难的问题。而且我认为能够“自然地”做到这一点的语言很适合玩耍,希望不仅仅是数学家。
答案 0 :(得分:35)
Haskell中:
Prelude> let a=[0,20..300]
Prelude> a
[0,20,40,60,80,100,120,140,160,180,200,220,240,260,280,300]
btw:无限列表也是可能的:
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]
答案 1 :(得分:20)
Excel中:
答案 2 :(得分:12)
MatLab的:
a = [0:20:300]
答案 3 :(得分: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|]
复杂的数字:
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|]
正如你所看到的,它只增加了实部。
如果步骤也是一个复数,它将增加实部和虚部,直到达到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|]
请注意,如果此行为与您的需求不符,您仍然可以重载(..)
和(.. ..)
运算符。例如。你想要它增加虚部而不是实部:
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|]
答案 4 :(得分:5)
稍后...
print range(0, 320, 20)
给出
[0, 20, 40, 60, 80, 100, 120, 140, 160, 180, 200, 220, 240, 260, 280, 300]
支持评论(我知道有一种更简洁的方式:P)
答案 5 :(得分:5)
和PHP:
$a = range(1,300,20);
答案 6 :(得分:3)
scala> val a = 0 to 100 by 20
a: scala.collection.immutable.Range = Range(0, 20, 40, 60, 80, 100)
scala> a foreach println
0
20
40
60
80
100
无限名单:
scala> val b = Stream from 1
b: scala.collection.immutable.Stream[Int] = Stream(1, ?)
scala> b take 5 foreach println
1
2
3
4
5
答案 7 :(得分:2)
SWYM语言似乎不再在线,可以从几个示例项中推断出算术和几何进度,并生成一个合适的列表。
答案 8 :(得分:2)
Groovy中,
assert [ 1, *3..5, 7, *9..<12 ] == [1,3,4,5,7,9,10,11]
答案 9 :(得分:2)
和C ++一样[使用C ++库]:
// List is different from STL list
List<int> integers = enumFrom(1); // Lazy list of all numbers starting from 1
// filter and ptr_to_fun definitions provided by FC++
// The idea is to _filter_ prime numbers in this case
// prime is user provided routine that checks if a number is prime
// So the end result is a list of infinite primes :)
List<int> filtered_nums = filter( ptr_to_fun(&prime), integers );
F C懒惰列表实现:http://www.cc.gatech.edu/~yannis/fc++/New/new_list_implementation.html
更多详情:http://www.cc.gatech.edu/~yannis/fc++/
Arpan
答案 10 :(得分:2)
在python中你有
a = xrange(start, stop, step)
(或简单地在python 3中的范围) 这为您提供了从开始到停止的迭代器。它可以是无限的,因为它是懒惰的。
>>> a = xrange(0, 300, 20)
>>> for item in a: print item
...
0
20
40
60
80
100
120
140
160
180
200
220
240
260
280
答案 11 :(得分:2)
我相信perl6中的语法是start ... *+increment_value, end
答案 12 :(得分:1)
你应该使用数学。
- (int) infiniteList: (int)x
{
return (x*20);
}
“智能”数组使用这种格式,因为我非常怀疑Haskel可以让你这样做:
a[1] = 15
定义a
后。
答案 13 :(得分:1)
我可能误解了这个问题,但是指定编码你给出的具体例子的方法的答案(按20计算)并不真正满足数组“缓存”生成数组成员的任意规则的要求。 .it似乎几乎任何完整的解决方案都需要一个自定义集合类,它允许使用委派的函数/方法生成成员,特别是因为所有可能的规则可能包括一些需要评估一些/所有现有成员以生成第n个成员的规则。
答案 14 :(得分:1)
Enumerable.Range(int start, int count)
,PHP提供了函数range(mixed low, mixed high, number step)
,... 编程语言足够“智能”。
除此之外,无限阵列几乎没用 - 它根本不是无限的,而是全部耗费内存的。
由于没有给定数字的直接后继者或前任者,因此不能简单地使用复数进行枚举。 编辑:这并不意味着您无法比较复数或使用指定步骤创建数组!
答案 15 :(得分:1)
几乎任何程序语言都可以为您提供此序列。问题是您想用什么语法来表达它。例如,在C#中你可以写:
Enumerable.Range(0, 300).Where(x => (x % 20) == 0)
或
for (int i = 0; i < 300; i += 20) yield return i;
或封装在一个类中:
new ArithmaticSequence(0, 301, 20);
或静态类中的方法:
Enumerable2.ArithmaticSequence(0, 301, 20);
那么,你的标准是什么?
答案 16 :(得分:1)
大会: 假设edi包含所需数组的地址:
xor eax, eax
loop_location:
mov [edi], eax
add edi, #4
add eax, #20
cmp eax, #300
jl loop_location
答案 17 :(得分:0)
MATLAB 它不是一种编程语言本身,而是一种工具,但你仍然可以像编程语言一样使用它。
它是为这样的数学运算而构建的,可以轻松地在阵列中轻松实现:)
a = 0:1:20;
创建一个从0到20的数组,增量为1。 而不是数字1,您还可以为增量提供任何值/操作
答案 18 :(得分:-1)
Php总是做得更简单,有时也很危险:)
答案 19 :(得分:-8)
嗯...... Java是我唯一认真使用的语言无法这样做(虽然我相信使用Vector而不是数组允许这样做。)