LINUX.ORG.RU

Любителям ()$. Хаскелистам и лисперам


0

2

Вот я читаю ваши треды о том, какие, якобы, хорошие языки лишп и хацкель, а также про то, как хаскелисты умеют свои точки и доллеры, лол.

А давайте посчитаем факториал^W среднее арифметическое списка на этих языках. Причём будем использовать function-level программирование. Не допускается использование ни одной переменной (т.е. идентификаторы можно связывать только с функциями). Боюсь, на лиспике ничего не выйдет, так как он не умеет это. Всё, что можно это вот:

(defun avg (list) (/ (reduce #'+ list) (length list)))

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

А на очень мощном и современном языке J задачка решается в миг:

avg=: +/ % #

на sclang тоже просто

var avg = _.sum / _.size

Думаю, в первую очередь надо учить такие языки, которые обеспечивают максимальную свободу написания кода. Долой явно прописанные аргументы функций и переменные!

Жду от хаскелистов решения

Ответ на: комментарий от anonymous

Композиция функций # (используется в APL'ах вместо filter) и > (достать значение из коробки) с рангом -1.

---

gethttp

gethttp возвращает текст вместе с разметкой, а не список слов. Попробуй ещё.

quantum-troll ★★★★★
()
Последнее исправление: quantum-troll (всего исправлений: 1)

пистон:

>>> l
[1, 5, -3, 4, 1]
>>> reduce(lambda x,y: x+y,[1,2,3,4])/len(l);
2
>>> 

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

ниасилятор.

dikiy ★★☆☆☆
()
Последнее исправление: dikiy (всего исправлений: 1)
Ответ на: комментарий от dikiy

x,y
l
Причём будем использовать function-level программирование. Не допускается использование ни одной переменной (т.е. идентификаторы можно связывать только с функциями).

-_-

quantum-troll ★★★★★
()
Ответ на: комментарий от anonymous

http://jsoftware.com/help/learning/07.htm
J — язык с многомерными массивами, и, соответственно, операциями над ними. Но операции часто нужно проводить не над всем массивом, а, например, над множеством (n - 1)мерных массивов или вообще над каждым элементом. В хаскеле для этого можно делать lift-lift-lift-lift. В J для этого есть ранги.
Собственно, для значений всё просто: ранг скаляра — 0, ранг одномерного массива — 1, ранг двумерного массива — 2 и так далее.
Ранг функции — значение, определяющее, как будет применена функция к массиву. Операция # по-умолчанию имеет бесконечный ранг, что значит, что она применяется к любому массиву целиком. Но выставив ей ранг -1, мы делаем так, что она применяется ко всем подмассивам с рангом меньше на единицу, соответственно возвращая одномерный массив с длинами подмассивов.
Многие операции в J применяются по-умолчанию к каждому элементу, например ^. (логарифм). Вообще, некий автоматический обобщённый аналог map свойственен всем APLоподобным языкам.

quantum-troll ★★★★★
()
Ответ на: комментарий от quantum-troll

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

(16 < #@>"_1)
?

anonymous
()
Ответ на: комментарий от anonymous

Примерно так, да.

Да, кстати выше ошибка: # в выражении #@< — не фильтр, а получение длина. Фильтр идёт позже: это тот #, что был между выражением и ].

quantum-troll ★★★★★
()
Последнее исправление: quantum-troll (всего исправлений: 1)
Ответ на: комментарий от anonymous

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

quantum-troll ★★★★★
()
Ответ на: комментарий от quantum-troll

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

Вот абсолютно те же фразы. Только утверждение про полноценные программы и желаю проверить.

anonymous
()

тред мне читать влом, топик я прочёл.

в J есть специальный синтаксис для комбинаторов (forks и trains), но для такой простой задачи они не нужны, вот на K, где вилок с поездами, слава богу, нет:

%/(+/;#:)@\:

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

anonymous
()
Ответ на: комментарий от anonymous

на хаскельный вариант с.

liftM2

anonymous
()

Не допускается использование ни одной переменной (т.е. идентификаторы можно связывать только с функциями).

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

hlebushek ★★
()
Ответ на: комментарий от MrKooll

Зачем читать условие задачи?

anonymous
()
Ответ на: комментарий от lovesan

Avg(a), турбо паскаль, некая функция для вычисления среднего

vertexua ★★★★★
()
>>> (lambda id=id: sum(id) / len(id))([1, 2, 3, 4])
2.5
>>> id # идентификаторы можно связывать только с функциями
<built-in function id>
>>> 

да, это жульничество

Virtuos86 ★★★★★
()
Последнее исправление: Virtuos86 (всего исправлений: 1)
17 января 2015 г.
Ответ на: комментарий от quantum-troll

Итак, я вернулся. Во-первых, фигня это всё. Ни

<@"_1
, ни
>@"_1
- не годятся для измерения длины слов в тексте.

Во-вторых, ищущий обрёл первую часть:

('(<.*?>|\n)';' ') rxrplc gethttp 'http://linux.org.ru/forum/development'

anonymous
()
Ответ на: комментарий от quantum-troll
#"1 {./.~ > deb ;: deb ('(<.*?>|\n)';' ') rxrplc gethttp 'http://linux.org.ru/forum/development'

возвращает для каждого слова 44. и всё проходит. чяднт?

anonymous
()
Ответ на: комментарий от quantum-troll

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

Не мог бы ты рассказать об этом подробнее?

mix_mix ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.