LINUX.ORG.RU

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


0

2

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

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

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

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

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

avg=: +/ % #

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

var avg = _.sum / _.size

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

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

Пффффф. ТС неосилятор, тацитное программирование есть не только в J.

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

http://stackoverflow.com/questions/11073250/tacit-programming-in-lisp

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

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

Завершающие фразы в песне варьируются, так что в принципе вариант с 0 bottles имеет место на жизнь. Но обычно либо твой вариант приводят, либо «if last bottle fall, what's the waste of alcohol» или как-то так, точнее не припомню.

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

Языки, в которых такое возможно, скорее всего, густо посыпаны сахаром.

Это не сахар, это комбинаторы. По сути, практическое использование полноты SK-базиса.

Miguel ★★★★★
()

Кстати о птичках - на комету села аппаратная Форт-машина. Сожрите это, скобканутые!

anonymous
()

Если через две тысячи лет меня вернут к жизни и спросят, чем сейчас занимаются люди, я отвечу «меряются факториалами на ЛОРе».

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

Лол, почему я, вчерашний школьник, знакомый с хаскеллем около года (при этом, использую его не часто), написал за 5 минут?

Haskell уже не тот...

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

называется huì, от китайского 䂕 (короткий)

У негров я бы коротким не назвал, хотя китайцам виднее.

iVS ★★★★★
()
Ответ на: комментарий от pseudo-cat

В самом деле, зачем лиспу выразительность. А то ещё, не дай бог, лисперы займутся чем-то полезным вместо срачей на ЛОРе.

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

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

я лучше так напишу, это хотя бы не ломает глаза.

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

pseudo-cat ★★★
()

Один комбинатор написать не могу, помогайте.

#lang racket

(define (list-f fl x) (map (λ (f) (f x)) fl))

(define sum (curry foldl + 0))

(define avg (compose (curry apply /) (curry list-f (list sum length))))

(avg '(1 2 3))

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

Это Common Lisp. Некоторый DSL для работы с массивами.

mean

А это Haskell, некоторый DSL для обработки статистики. Ты уже совсем мозги пропил.

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

Кстати, называется statistics, от английского «статистика».

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

Размер скорее всего кэшируется

А может ещё и сумма кэшируется? Да чё там, может ещё и avg для списка вычисляется при каждом его изменении и тоже кэшируется?

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

при каждом его изменении
изменении

ловите быдлокодера

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

В C++ же std::vector и std::array хранят кол-во элементов во время выполнения / компиляции, так что зависит от коллекции. std::accumulate(xs.begin(), xs.end(), 0) / xs.size(), иначе можно uncurry div . foldl (\(s, l) e -> (s + e, l + 1)) (0, 0), если (\(s, l) e -> (s + e, l + 1)) обфускации подвергнуть, то flip ((*** (+1)) . (+)).

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

А это не термин хаскелистов? Википедии больше нравится tacit programming

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

Да знаю я такие поделия. Таких huiев там огромное количество, только кроме пары лиспофанбоев их никто не поддерживает.

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

Я так и представляю, как ты в каждой программе будешь писать в таком стиле на лиспе, лол. А в J это естественно

niemand
() автор топика

Factor

: avg ( seq -- m ) [ sum ] [ length ] bi /
buddhist ★★★★★
()
Ответ на: комментарий от niemand

Это не список, а Array, чтобы ты знал

А давайте посчитаем факториал^W среднее арифметическое списка на этих языках

Ну так список или массив? И какой всё таки будет запись для списка в этом твоём Жо?

no-such-file ★★★★★
()

Не понял в чем проблема написать это на чеи угодно, хоть вот на яве.

float avg(int... a) {
    return Arrays.stream(a).reduce(0, (p, v) -> p + v) / a.length;
}

Чистые функции, никаких явных присваиваний

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

Скажем так - почти не читал. Кроме первого абзаца.

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

Не допускается использование ни одной переменной

Так нет ни одной переменной. Я же не делаю нигде явного присвоения значения.

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

Ну так p, v - это параметры функции. Т.е. я никакого связывания не делаю. А про то, что они не могут быть именованными - в условии вроде слов нет.

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

И это какбы намекает на нужность подобной писанины.

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

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

Кто-нибудь вообще читает тред?

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

Речь не о том, что и как я пишу на лиспе. И даже не о твоих фантазиях на эту тему, которые ты выставляешь на всеобщее оборзение. Хотя само наличие фантазий и интереса моим лиспокодом говорит о том, что бомбануло. Нежелание признать собственную никчёмность повлекло за собой всю эту ветку диалога.

Вот этот пример с avg описан в каждой статье про J, какая мне только попадалась. Покажи, как (например) на J тацитным программированием реализуется выбор всех слов, чья длина превосходит 16 символов, по URL страницы. Да, на Хаскелле point-free вариант реализуется на раз-два. И аргументы там не будут нужны, ибо монады и каррирование. Не говоря уже о лиспе.

anonymous
()

Ты бы научился сначале на лиспе писать, лалка:

(defun avg (list)
  (labels ((avg-impl (list sum len)
    (if list
      (avg-impl (cdr list) (+ sum (car list)) (1+ len))
      (/ sum len))))
  (avg-impl list 0 0)))

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

А толку-то? Как не мог в неявное программирование, так и не может дальше.

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

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

Кто-нибудь вообще читает тред?

Синтаксиса тикля не знаешь или просто дурачок? Там столько-же переменных сколько и в твоем примере на лиспе.

MrKooll ★★★
()

Лол, ну вот сам и пиши свои фактореалы на своем нечитаемом J. Лисп и хаскель хороши тем, что помимо академических задач на них действительно можно что-то писать. Примеры проектов на них приводить не буду, поскольку в каждом подобном треде спрашивают что на этих языках написано кроме фактореалов, и в каждом треде приводят уйму вещей на них написанных. Найдешь сам.

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

Не представляет интереса вырванный из контекста самый примитивный кусок задачи, с котором, я знаю, J справится.

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

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

Да, на Хаскелле point-free вариант реализуется на раз-два. И аргументы там не будут нужны, ибо монады и каррирование.

монады

аргументы там не будут нужны

Лол

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

Про лисп - очевидно. Давай на J, жги глаголом сердц людей!

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