Какой язык понимает «переменная a = 0, 20, ..., 300»? - PullRequest
11 голосов
/ 14 июня 2010

Какой язык умный, чтобы он мог понимать variable a = 0 , 20, ..., 300? таким образом, вы можете легко создавать массивы с его помощью, предоставляя пошаговый старт var last var (или, лучше, не последнюю переменную (как бесконечный массив)), и не только для чисел (но даже комплексных чисел и пользовательских структур, таких как Sedenion's , который вы, вероятно, определите себя как класс или что-то еще ...)

Суть в том, чтобы найти язык или алгоритм, пригодный для использования на языке, который может кэшировать закон изменения массива переменных, которые вы задали (или параметры этих переменных). И с помощью этого закона составьте структуру, из которой вы сможете получить любую переменную (и).

Для всех - примеры, которые вы предоставляете, очень полезны для всех начинающих. И в то же время являются базовыми знаниями, необходимыми для создания такого класса «Smart Array». Поэтому большое спасибо за вашу восторженную помощь.

Как заметил ДжеффСахол

все возможные правила могут включать некоторые которые требуют оценки некоторых / всех существующие члены для создания nth член.

Так что это сложный вопрос. И я думаю, что язык, который сделал бы это «Естественно», был бы замечательным, чтобы играть \ работать, надеюсь, не только для математиков.

Ответы [ 20 ]

35 голосов
/ 14 июня 2010

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]

Кстати: возможны также бесконечные списки:

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]
20 голосов
/ 14 июня 2010

Excel:

  • Написать 0 в A1
  • Напишите 20 в A2
  • Выберите А1: 2
  • Перетащите угол вниз
12 голосов
/ 14 июня 2010

MatLab:

a = [0:20:300]
10 голосов
/ 14 июня 2010

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|]
5 голосов
/ 14 июня 2010

И PHP:

$a = range(1,300,20);
5 голосов
/ 14 июня 2010

Подождите ...

Python:

print range(0, 320, 20)

дает

[0, 20, 40, 60, 80, 100, 120, 140, 160, 180, 200, 220, 240, 260, 280, 300]

Подсказки к комментариям (я знал, что былоболее лаконичным способом: P)

3 голосов
/ 15 июня 2010

Scala:

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
2 голосов
/ 14 июня 2010

В 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
2 голосов
/ 15 июня 2010

Я полагаю, что синтаксис в Perl6 start ... *+increment_value, end

2 голосов
/ 15 июня 2010

Язык SWYM , который, по-видимому, больше не находится в сети, может выводить арифметические и геометрические прогрессии из нескольких примеров элементов и генерировать соответствующий список.

...