Узнал недавно про забавный язык 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
Для начала наверное хватит :)
Много чего интересного не осветил как про язык, так и про идущие в комплекте библиотеки
- можно ещё поговорить про арифметику
- построение графиков/фракталов
- подробнее работа с массивами/матрицами (в том числе многомерными)
- подробнее построение функций (как пример модификация с помощью наречий)
- рекурсия
- случайные числа, статистическая обработка
Много интересного идёт в комплекте, на их сайте есть много примеров кода.