Что интересно.

Jan 16, 2011 00:12

Ветка обсуждения "Почему Лисп?" в ru_lisp.

Они первые начали. ;)

ЖЖ, lisp

Leave a comment

thesz January 16 2011, 10:26:24 UTC
Да я пользователей Схемы-то и не вижу. Всё вокруг товарищи на CL.

Вот ты, ты что используешь?

Сами лисперы Схему-то лиспом (современным лиспом) особо не считают. Тому доказательство Википедия, статья про Схему.

Не считать же любое творение с s-exp Лиспом?

>у хаскеля постоянно "а вот есть специальные функции типа +, которые безо всяких амперсандов можно юзать как "

Приведи цитату.

>То, что лисп проще, показывается простым фактом, о котором я уже упоминал - я (и не только я) начал что-то писать на лиспе после 20 минут.

Что-то доказывается статистикой, а не анекдотом.

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

>На Хаскеле такого не получается.

У меня уже статистика, надо сказать. 2 недели хватает программисту, чтобы начинать дополнять творение коллективного разума с хитровывернутыми типами. По 3 людям уже. Только на текущей работе.

>Зачем ты наезжаешь на такой прекрасный инженерный язык, как лисп, я не понимаю :)

Он когда-то был "прекрасным инженерным языком". Когда альтернатив не было. Года до 1978.

Reply

grundik January 16 2011, 11:25:08 UTC
Я юзаю racket, то есть схему на стероидах.
Pure scheme уныла для любой задачи, кроме обучения программированию.

Схема - это лисп-1, типа официальный представитель ;) Что там википедия пишет - мне лично насрать :)
Что конкретно считать лиспом, а что нет - вопрос сложный. По факту получается так, что если есть sexp-ы и макросы, то это лисп (по крайней мере опровержений такого критерия что-то в голову не приходит - в clips, которая таки не лисп, макросов вроде нету).

Про амперсанды - Сергей, ну вы что же меня в выходной заставляете искать всякое, да ещё и во флудерском споре? :) Имейте совесть.

Вообще, я имел в виду вот это: a + b, но при этом div a b, но можно и a `div` b, ну и + a b тоже можно (но я уже забыл как так сделать) - ну что это такое? Где консистентность? То, что в лиспе (common lisp) есть спецформы - это просто нюанс. Любому человеку можно сказать, что на первом месте в sexp-е находится имя функции, а остальное - это аргументы. Остальные детали не мешают понимать код.

Про две недели говорить не хочу, ибо очень субъективная вещь, при этом у меня есть мнение (хрен оспоришь) что сложнее въезжать не в технологии, а в предметную область и историю (backward compatibility, традиции, принципы принятия решений, приоритеты) проекта. У меня вот есть статистика, что шесть человек, не имеющих опыта программирования, после часовой лекции по scheme пошли коммитить в работающий проект, и всё было нормально.

Про инженерные языки. Ты предлагаешь хаскель в качестве такового? Он не годится.

Reply

thesz January 16 2011, 11:48:08 UTC
>Про инженерные языки. Ты предлагаешь хаскель в качестве такового? Он не годится.

Почему?

>Вообще, я имел в виду вот это: a + b, но при этом div a b, но можно и a `div` b, ну и + a b тоже можно (но я уже забыл как так сделать) - ну что это такое? Где консистентность?

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

>То, что в лиспе (common lisp) есть спецформы - это просто нюанс. Любому человеку можно сказать, что на первом месте в sexp-е находится имя функции, а остальное - это аргументы. Остальные детали не мешают понимать код.

Ох ты. И вдруг получается, что не всякую функцию можно передать аргументом. zipWith3 if conditions trues falses не работает. Действительно, нюанс.

>Про амперсанды - Сергей, ну вы что же меня в выходной заставляете искать всякое, да ещё и во флудерском споре? :) Имейте совесть.

А когда ещё? Сейчас самое время.

Reply

nealar January 16 2011, 12:31:04 UTC
Это всё удобные сокращения
Говорят, явщиков раздражают всякие значки. Они лучше 5 слов напишут, чем поставят 3 кракозябры.

Reply

thesz January 16 2011, 12:32:38 UTC
Это не явщиков раздражают, это создателей явы раздражало. А явщики уже по инерции.

Reply

nealar January 16 2011, 12:34:11 UTC
Создатели явы могли бы и + с - забанить. :)

Reply

thesz January 16 2011, 12:39:09 UTC
Не могли. ;)

Reply

grundik January 16 2011, 12:40:03 UTC
Хаскель не годится в качестве инженерного потому что он сложный :)
Ну и ещё там неудобно с сайд-эффектами писать.

Насчёт удобных сокращений - (a +) b - это что вообще такое? В смысле, что оно делает? Создаёт функцию f x = a + x и применяет к ней аргумент b? Как можно такой синтаксис легко понимать? Я про то и говорю - я не могу хаскельный код читать, потому что там закорючек больше чем в перле, при этом каждая может поменять смысл строчки. Ей-богу, мелкая путаница с порядком вычислений в лиспе (которая, прошу заметить, не имеет практически никакого значения в 90% программ) гораздо меньший минус, чем вот это вот в хаскеле (отсутствие карринга в лиспе раздражает гораздо больше). Вспомним ещё всякие стрелки и вообще кранты. Да даже от точек у меня срыв мозга случается. А это только синтаксис же, ещё до типов и классов типов не дошли даже!!111

Насчёт "не всякую функцию можно передать аргументом" - не совсем понял. Пример (на лиспе, не на хаскеле) можно?

Reply

thesz January 16 2011, 12:55:04 UTC
>Хаскель не годится в качестве инженерного потому что он сложный :)

Это опять следует из твоих действий?

>Ну и ещё там неудобно с сайд-эффектами писать.

Удобней многих других ЯП.

Чтобы побочные эффекты были везде - так да, трудней писать. А это действительно важно, писать именно так?

>Насчёт "не всякую функцию можно передать аргументом" - не совсем понял. Пример (на лиспе, не на хаскеле) можно?

if выглядит, как обычная функция. Можно ли её передавать аргументом в другую функцию?

Сможешь ли ты написать функцию zipWith3, принимающую на вход функцию и три списка - всего четыре аргумента, - и возвращающую список наименьшей из трёх входных длины, который получается применением функции к значениям с одинаковым индексом из трёх списков?

zipWith3 f [] _ _ = []
zipWith3 f _ [] _ = []
zipWith3 f _ _ [] = []
zipWith3 f (a:as) (b:bs) (c:cs) = f a b c : zipWith3 f as bs cs

Сможешь ли ты передать в zipWith3 "функцию" if?

>каждая может поменять смысл строчки

Не может. Или приведи пример, только посложней, чем a + b.

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

Это прямое следствие карринга, надо сказать.

См. также J/K.

>Вспомним ещё всякие стрелки и вообще кранты.

Какие стрелки?

>Да даже от точек у меня срыв мозга случается.

Что за точки?

>А это только синтаксис же, ещё до типов и классов типов не дошли даже!!111

Я не понимаю, о чём ты.

Reply

grundik January 16 2011, 15:17:30 UTC
>> Хаскель не годится в качестве инженерного потому что он сложный :)
> Это опять следует из твоих действий?

"Это" - это что? То, что Хаскель сложный, или то, что инженерный язык должен быть простой?
Про сайд-эффекты - шутка.

Про zipWith3: если бы это был LOR, то я дал бы тебе решение (переопределив if так, чтобы он не был спецформой и реализовав его функциональность, например, через cond). Ну а если нормально разговаривать то да, в данном случае надо знать, что if - это спецформа. В каких языках нет подобного?

> Какие стрелки?

Ну arrows блин, все эти -< да >>> сотоварищи.

> Что за точки?

foo = bar . baz вместо foo x = bar (baz x)
В простых варинтах понятно всё, в сложных - мозг ломается на парсинге.

Reply

thesz January 16 2011, 15:23:34 UTC
>данном случае надо знать, что if - это спецформа. В каких языках нет подобного?

В которых есть синтаксис. В которых нет специальных форм и макросов, не отделённых специальным синтаксисом.

>> Какие стрелки?
>Ну arrows блин, все эти -< да >>> сотоварищи.
>> Что за точки?
>foo = bar . baz вместо foo x = bar (baz x)
>В простых варинтах понятно всё, в сложных - мозг ломается на парсинге.

Это всё не синтаксис. Это уже работа с функциями.

Макс пообещал поднять mskhug.ru, пока он лежит. Потом, если будет время, посмотри на примеры моего кода на http://thesz.mskhug.ru/svn/ и скажи, что непонятно.

Reply

voidex January 16 2011, 15:21:11 UTC
Вот знаете, я когда-то Хаскель тоже не знал и учил. Вот ни одной перечисленной проблемы не испытал. Другие были, но это либо троллинг, либо детский сад какой-то.

Reply


Leave a comment

Up