?

Log in

No account? Create an account

Предыдущий пост Поделиться Следующий пост
Реализация (NM – 1)-нашек
lex_kravetski
Для интересующихся выкладываю реализацию (NM – 1)-нашек на языке Wolfram. Сама постановка задачи описана вот тут.

До строки, начинающейся с «pos» — инициализация. Со строки «click» — интерфейс. Между ними «движок». Проверка выигрыша вписана в «интерфейсную часть» — в конец длинного «win».

Да, вся логика возможных перемещений и их реализация содержится в шести выражениях.

Примерно вот этим годные современные языки программирования отличаются от негодных и от несовременных: они позволяют сосредоточится на решении задачи, а не на соблюдении всех программистских ритуалов.



(NM-1)-нашки.png


  • 1
А в этом вольфраме что с этой прогой можно сделать? Как дальше повторно использовать.
Можно ли exe-шник запилить?

Можно в CDF-файл превратить, который запускается через CDF-плеер. Что, в общем-то, даже проще, чем в случае, например, с Java. В том числе, можно на сайт выложить, но чтобы посмотреть можно было, нужен плагин для браузера.

Можно скомпилировать для вызова из С, Java и чего-то ещё при наличии рантайм-библиотек.

Можно вызывать функции из кода на С, Java и чего-то ещё при наличии установленной Mathematica.

Возможно, ещё что-то возможно. Я не особо эту область исследовал.

Edited at 2017-07-05 13:25 (UTC)

Вообще-то из приведенного текста программы неискушенному читателю совершенно невозможно понять что он делает. Что никак не является признаком годного языка. Кроме того там куча каких-то загадочных функций. Они библиотечные? Тогда, прежде чем написать несколько строк программы, надо потратить гораздо больше времени на разобрательство в этих библиотеках и функциях. Или это самописные функции, текст которых ты не считаешь нужным приводить?

> Вообще-то из приведенного текста программы неискушенному читателю совершенно невозможно понять что он делает. Что никак не является признаком годного языка.

А на годном языке, типа, незнающие его всё равно всё поймут?

Не надо строить иллюзий: кому-то что-то понятно, потому что он эту часть знает. Если человек, например, не в курсе, что такое «циклы», то ему точно так же будет непонятно, если в коде будет какой-то там «for».

И если даже на картинке нарисовать какой-то прямоугольник со скошенными углами или типа того, то всё равно непонятно будет.

Но цикл for объяснять незнающему — особенно в плане того, как им вообще пользоваться — ощутимо дольше, чем все эти функции вместе взятые.


> Кроме того там куча каких-то загадочных функций. Они библиотечные?

Да.


> Тогда, прежде чем написать несколько строк программы, надо потратить гораздо больше времени на разобрательство в этих библиотеках и функциях.

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

Если же ты, наоборот, читатель, то ставишь курсор на функцию, нажимаешь F1 и читаешь в справке, что она делает.

Edited at 2017-07-06 07:50 (UTC)

Выкладывать код лучше фоткой монитора с телефона, я вас уверяю. Ещё баще засунуть эту фотку в xls, а xls в rar.

В общем-то уже давно есть мнение, что для каждой задачи есть более удобный язык. Например фольфрам наверное не подойдет для написания системы типа того же ЖЖ.
Ну или системы управления в реальном времени,может быть еще куча причин, по которым он не подходит.
Вопрос в том, кого хотим вырастить - системщика, гуевщика, админа, аналитика ... или универсала.

> Например фольфрам наверное не подойдет для написания системы типа того же ЖЖ.
> Ну или системы управления в реальном времени

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


На самом деле, это — миф: будто разные языки хороши для разных задач. Нет, вселенная совершенно не справедлива. Поэтому небольшая часть языков хороша вообще для всего, очень большая — плоха вообще для всего, а промежуточные находятся на уровне: «ну, в принципе, ничего так, сойдёт».

Узкоспециализированных же языков: хороших для особого множества ситуаций, а для остальных ситуаций — плохих, — весьма мало.

Библиотеки для таких ситуаций, да, есть. И «языки внутри языка» тоже есть. Но не сами языки.

Вот не могу согласиться

Вольфрам прекрасен (говорю как активный пользоваль и обожатель), но есть несколько объективных причин, по которым для написания даже простенького веб-сервиса я выберу Go, python, Rust или жабку.

Во-первых, вольфрам сильно платный, а дополненная лицензия на использование вольфрама для net-технологий требует ещё пару грузовиков вечнозелёных бумажек.
Во-вторых, у вольфрама очень спецефичный синтаксис, этакий лишпик, он позволяет (и даже поощряет) писать неудобоваримый лапшекод, в котором через месяц без пол-литры не разберёшься.
В-третьих, отстуствие нормальных библиотек или фрейморков, если мы конечно не говорим о всём, связанном с обработкой информации (тут вольфрам прекрасен)
В-четвёртых, маленькая популярность языка. Новых разработчиков найти будет очень сложно.
В-пятых, адовый вендерлок. Если господин Стивен Вольфрам решит, что он хочет выпилить N функционала из математики или поломать обратную совместимость, то ему никто и не вякнет, ибо альтернатив просто нет (да, R, да jupyter, но если есть уже что-то написанное в большом количестве для старых версий, то ты попал)
В-шестых, это специфический формат файлов исходного кода. Ни git, ни vcs с ними тупо не работают (

> Во-первых, вольфрам сильно платный

Это никак не относится к самому языку.


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

Любой язык это позволяет. Гораздо более актуальный вопрос про каждый язык: позволяет ли он писать не так. И, таки да, Вольфрам позволяет.


> В-третьих, отстуствие нормальных библиотек или фрейморков, если мы конечно не говорим о всём, связанном с обработкой информации

Опять же, это не про сам язык. Это про комьюнити. Можно ли такие библиотеки написать? Да, можно. Написали ли их к данному моменту? Нет, не написали.


> В-четвёртых, маленькая популярность языка. Новых разработчиков найти будет очень сложно.

Это снова не про сам язык.


> В-пятых, адовый вендерлок. Если господин Стивен Вольфрам решит

Обратное обычно ещё хуже: совместимость с версией 1933-го года уверенно превращает язык в ходячего мертвеца.


> В-шестых, это специфический формат файлов исходного кода. Ни git, ни vcs с ними тупо не работают

Я сам не проверял, но мне это кажется странным: и записные книжки, и модули — текстовые файлы. С ними должно работать всё, что работает с текстовыми файлами. В том числе, должно работать сравнение версий, если оно работает для текстовых файлов.


В общем, если выбирать между Scala и Wolfram для этой задачи, я бы, конечно, выбрал Scala. Или даже Java 8. Но вот при выборе, скажем, между С++ и Wolfram, я бы выбрал Wolfram.

При условии, разумеется, того, что он вдруг стал бы бесплатным, но мы сейчас про языки, а не про условия их распространения.

Ну и, конечно, если бы для С++ движок уже был, а для Вольфрам — нет, то С++ для этой задачи бы выиграл, но это тоже не про сам язык. Это — про наличие 90% требуемого результата в готовом виде. В таких условиях даже Бейсик бы у Скалы выиграл.

> Это никак не относится к самому языку.
Так можно было бы говорить при наличии сторонних реализаций.

Мы же живём в реальном мире, в котором приходится учитывать не только красоту языка.

> Написали ли их к данному моменту? Нет, не написали.

И это большая проблема.

> С ними должно работать всё, что работает с текстовыми файлами.
К сожалению, при сохрании блокнота в файл Вольфрам генерирует и записывает массу лишней мета-информации вроде дерева ячеек (внутри дркумента на самом деле что-то типа DOM), кэшированных картинок и прочих сложно структурированных данных, из-за чего даже одна добавленная в исходный может сгенерировать пару килобайт добавочного мусора.

> Обратное обычно ещё хуже: совместимость с версией 1933-го года уверенно превращает язык в ходячего мертвеца.

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

> В таких условиях даже Бейсик бы у Скалы выиграл.

Разумеется. Поэтому я выберу бейсик для работы с excel документами, а не скалу.


Потому что язык - это прежде всего инструмент.

Прошу прощения за многочисленные орфографические ошибки.
Пересмотрел сообщение и ужаснулся, а исправить нельзя.

  • 1