J programming language. Первое впечатление

Apr 25, 2007 15:28

Узнал недавно про забавный язык J (http://jsoftware.com/). Узнал я про него пока немного, но язык кажется очень интересным, он непохож ни на один язык, с которым я до этого сталкивался.


Первое впечатление, что он является непревзойдённым инструментом для вычислений "на коленке", отлично работает как калькулятор. Думаю, что способен заменить собой maple-подобных монстров.
Из особенностей хочу отметить оригинальный синтаксис, способный непосвящённого ввести в ступор (да и посвящённого тоже).
Так несложно обработать какие-то данные и визуализировать результат, например нарисовать график. Несмотря на некоторую экзотичность, J позиционируется как язык общего назначения, и, в принципе, на нём можно писать полноценные приложения.

1. J как калькулятор. Здесь всё просто
1+1
> 2

12*13
> 156

2^121x // использовали x, чтобы использовать длинную арифметику
> 2658455991569831745807614120560689152

2 ^. 3 // логарифм
> 1.58496

2 >. 3 // максимум
> 3

2%3 // деление, первое, что необычно. / означает нечто совсем другое
> 0.666667

%: _121 // корень квадратный из -121
> 0j11 // 0+11i

! 30x // факториал
> 265252859812191058636308480000000

! 0.5 // факториал, то есть гамма-функция со смещением
> 0.886227

3 ! 5 // число сочетаний по 3 из 5
> 10

12 +. 20 // НОД, GCD
> 4

q: 1 + 2^30 // разложение на множители
> 5 5 13 41 61 1321

p: 20000 // 20000-е простое число
> 224743
// а также корни многочлена и т.п.

2. Работа со списками/массивами
Особенно силён J при работе с массивами
1 + 1 2 3
> 2 3 4

1 2 3 + 1 2 3
> 2 4 6

! 1 2 3 4
> 1 2 6 24

i.10 // первые 10 целых чисел
> 0 1 2 3 4 5 6 7 8 9

p: i.10
> 2 3 5 7 11 13 17 19 23 29

2 3 $ 1 2 3 4 5 6 // матрица из 2-х строк, 3-х столбцов
> 1 2 3
> 4 5 6

3. Существительные, глаголы, наречия...
J пытается имитировать естественный язык.
1, 2, 1 2 3 - существительные

x =: 1 2 // как x=1 в C++
x - местоимение

+ - глагол

/ - наречие. Модифицирует глаголы
+/ 1 2 3 // -> это становится 1+2+3
> 6

%/ 1 2 3 // -> это становится 1%2%3
> 1.5 // вычисления идут справа-налево 1%(2%3)

>./ 1 23 12 3 // максимум
> 23

sum =: +/
sum 1 2 3
> 6

(i.10) !/ i.10 // получится треугольник Паскаля.
1 1 1 1 1 1 1 1 1 1
0 1 2 3 4 5 6 7 8 9
0 0 1 3 6 10 15 21 28 36
0 0 0 1 4 10 20 35 56 84
0 0 0 0 1 5 15 35 70 126
0 0 0 0 0 1 6 21 56 126
0 0 0 0 0 0 1 7 28 84
0 0 0 0 0 0 0 1 8 36
0 0 0 0 0 0 0 0 1 9
0 0 0 0 0 0 0 0 0 1

Для начала наверное хватит :)
Много чего интересного не осветил как про язык, так и про идущие в комплекте библиотеки
  • можно ещё поговорить про арифметику
  • построение графиков/фракталов
  • подробнее работа с массивами/матрицами (в том числе многомерными)
  • подробнее построение функций (как пример модификация с помощью наречий)
  • рекурсия
  • случайные числа, статистическая обработка
Много интересного идёт в комплекте, на их сайте есть много примеров кода.

j, programming, programming languages

Previous post Next post
Up