Pull to refresh
244
0
Осипов Роман @OsipovRoman

Руководитель IT-студии, эксперт Wolfram, математик

Send message
Тут много вариантов, может и префиксный быть:

ListPlot@Log@Abs@Fourier@data

Правые и левые композиции

ListPlot@*Log@*Abs@*Fourier@*data
Fourier/*Abs/*Log/*ListPlot@data

Wolfram Language просто позволяет очень свободно писать код, это правда, отсюда и свой стиль, хотя часто определенные конструкции быстрее работают, что уже с опытом приходит. А другие конструкции проще реализовать.
Да, получается так. Его синтаксис действительно интересен весьма:

: fact ( n -- n1 )
   | i | 1 n loop: i [ i * ] ;
Обновил функцию. Теперь есть вариант, в котором отсутствует хоть какая-то очистка. Отрадно, что как я и думал, результат изменился несущественно.
Там просто было 50 языков, а на неотфильтрованной — 80.

Это, безусловно, путает. Поэтому исправил, теперь на этих диаграммах с усами везде по 80 языков.
Вы видимо пот токеном понимаете что-то «особое» (или обязательно рабочий фрагмент кода). То, что в приведенном вами примере выдается 6 токенов — вполне разумно, их там именно столько.

В моей статье (по аналогии со статьей Джона) был принят подход с токенами для того, чтобы компенсировать длину названий функций и переменных, что явно верно учитывается в количестве символов кода (а то, в одном языке что-то вызывается как sin, а в другом как mathematicalsin, условно говоря, хотя по сути это одна единица).

Этот подход себя оправдывает, потому что две другие функции (количество символов и строк) дают те же результаты.

Можно также говорить о том, что в Wolfram Language есть полная форма выражения, тогда оно будет выглядеть как

CompoundExpression[SetDelayed[tokenCount[Pattern[str, Blank[String]]], Length[tokens[str]]], Null]


и в нем будет 11 токенов.

Можно говорить о том, что еще более «глубоко», верным будет выражение в боксах:

RowBox[{RowBox[{RowBox[{"tokenCount", "[", "str_String", "]"}], ":=", 
    RowBox[{"Length", "[", RowBox[{"tokens", "[", "str", "]"}], 
      "]"}]}], ";"}]


которое опять же выдаст 11 токенов.

То, что здесь приведено в статье вполне разумно к применению. Я согласен, что корректировки стоит внести и я их, конечно, внесу для точности.

Вы всегда можете предложить свое решение или предложить правильную версию токенизатора, учитывающую все особенности всех языков — это в целом не плохой вариант был бы вашей дебютной статьи на Хабре.
Он не самый популярный на RosettaCode, он примерно на месте так 65-м выходил, насколько помню. Многие графики построены для первых 30 языков, часть для 50-ти. Только несколько для 80-ти.
То о чем вы говорите имеет отношение только к близости языков.

Так-то токеном считается при подсчете любая конструкция, по сути, разделенная пробелом (или другим white-space знаком).

Да, стоит учесть, хотя каких-либо критических изменений не будет.

Спасибо за четкие указания, сделаю UPD позже. Я, безусловно, на 600 языках не программирую, поэтому знать особенности каждого не могу.
Из определения следует, что прямое вычисление требует порядка n^2 операций.

Вопрос — можно ли вычислить за O(n)? Можно ли найти какую-то другую точную оценку?
Задачи не простые, прямо скажем, но интересные. Как минимум — клеточные автоматы крайне интересная тема и в неё можно погрузиться.
Добавил в статью ролик с коротким описанием клеточных автоматов)
Видео
Вы просто делаете подстановки на основе цветов ячеек на предыдущем ярусе. Это довольно просто. Что вас смущает?)
Здорово. Применить к построению красивых графов, вершины которых имеют подписи или иллюстрации, помещающиеся в кругах —просто отлично, чтобы не было наложений на вершины.
Ну это я волюнтаристически добавил к распарсенным данным. Стоит, конечно, некоторую чистку сделать, хотя что-то вроде «Young Ned» в данных по сути ничего не меняет, так как на уровне стат. погрешности.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity