LINUX.ORG.RU

Приходилось ли вам писать на Лиспе?


2

2

Ну, что ж, в Development так в Development, хотя Лисп давно перестал быть мемом одного лишь Development'а (и даже одного ЛОРа). Итак, сабж!

[ ] Да, профессионально и за деньги
[ ] Да, just for fun и для самообразования
[ ] Да, участвовал в opensource-проекте
[ ] Да, пилил скрипты Emacs/GIMP/AutoCAD/Lilypond etc.
[ ] Да, в рамках образовательной работы (лаба, курсовик, диплом)
[ ] Да, в рамках академической работы (диссертация, статья, монография)
[ ] Да, мне сказали, что лисперов любят девушки
[ ] Нет, но собираюсь
[ ] Нет, и не собираюсь
[ ] Вообще-то я Джон МакКарти, а вы кто такие?
[ ] в Советской России Лисп пишет на тебе!

Приветствуются развернутые ответы и верифицируемые пруфлинки. Например, на какую фирму работали, в каком конкретно opensource-проекте участвовали, какая была тема научной работы, помогло ли с девушками, и тому подобное. INB4 буквоедов: под «лиспом» подразумеваются все языки семейства: Scheme, CL, Clojure и прочие.

★★

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

Кстати говоря, впервый раз, когда я столкнулся с подобной записью выражений в лисп, я подумал, ЭТО ЖЕ НЕУДОБНО!!! Но главное то, что несмотря на то, что в лиспе я не пишу, сложные математические формулы читаются в префиксной форме _ЛУЧШЕ_, чем в инфиксной.

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

ЗЫ я серьезно =)

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

ну именно его «фортресовцы» и предлагали раньше

как теперь - не знаю

спасибо за наводку - посмотрю на этот самый Fortress

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

> что ни разу не встречал в физико-математической литературе.

Я в замешательстве, какое отношение лисп имеет к физико-математической литературе?

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

> Отвечаю Выражение G(cos(sin(log(x + 4))), 45 , L, 3 + U + i) / H(p) одинаково пишется как в литературе, так и в С, Паскале, Жабе и т.п. Запишите это на Лиспе, мне интересно посмотреть насколько оно там читаемое будет. Разубедите в нечитаемости Лиспа дядю.

Что-то вы совсем не то говорите, как, впрочем, всегда. Напомню вопрос для мегаЪ:

a = b + c в C и математике означают совершенно разные вещи, так зачем так стремться в тому, чтобы одинаково их записывать?


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

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

сложные математические формулы читаются в префиксной форме _ЛУЧШЕ_, чем в инфиксной

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

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

писать

\ (/ (G (cos (sin (log (+ x 4)))) 45 L (+ 3 U i)) (H p))

что ни разу не встречал в физико-математической литературе.


Ты явно не понимаешь Лисп.
Будто бы запись для функций cos(x) сильно отличается от (cos x).
Что касается сахара для операторов: google://infix/.

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

>спасибо за наводку - посмотрю на этот самый Fortress

там ещё не на что смотреть - там только «концепт», реализованный на JVM. Хотя вроде уже какая-никакая, но компиляция в байткод появилась - раньше был только интерпретатор

Да и будущее туманно - захочет ли его поддерживать Oracle?

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

Почему же из двух старичков Лиспа и Фортрана математика осела на инфиксном Фортране, а не Лиспе?

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

Ну уж в китайском интонационных смыслообразующих различий как бы не побольше было

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

И тут снова я!

Во-первых, напиши-ка критерии человекочитаемости языка программирования

Наверно, имеется ввиду выразительность, сходная естественному языку.

factorial
    "Answer the factorial of the receiver."

    self = 0 ifTrue: [^ 1].
    self > 0 ifTrue: [^ self * (self - 1) factorial].
    self error: 'Not valid for negative integers'

Вот так - читаемо?

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

Неужто и Фортран был заблюждением и ложной дорогой вместо Лиспа? Вся история ЯП что ли сплошное заблуждение, но под светом Лиспа, терпеливо ждущим своего часа, часа прозрения программеров? Которые когда-нибудь покаются и скажут, что были неправы, игнорируя свет истины Лиспа?

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

> Почему же из двух старичков Лиспа и Фортрана математика осела на инфиксном Фортране, а не Лиспе?

особенно видимо «символьная алгебра» (и вообще всё, что связано с символьными вычислениями) сильно засела на фортране, да? таки SICP уже осильте хотя бы

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

А если посмотреть объективно - возьмём сферического человека в вакууме, который знает только английский язык и математику, и покажем ему варианты факториалов - тот, что разместил я, и аналог на CL. В какой он врубится быстрее?

Делайте ваши ставки, господа ^_^

yoghurt ★★★★★
()
Ответ на: И тут снова я! от yoghurt

Кстати читаемо и понятно сразу. Ещё бы ^ заменить на return.

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

Вам уже раза три причину указывали. Читайте комменты.

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

> Почему же из двух старичков Лиспа и Фортрана математика осела на инфиксном Фортране, а не Лиспе?

Потому что тогда (да и сейчас) Fortran очень быстро считался? Не? Fortran - он же почти C, только чуть поуродливее и чуть получше приспособлен для записи работы с матрицами. Никакой сборки мусора, разрешения типов в рантайме --> каждый такт процессора - полезная операция над числами.

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

Отдаю голос Haskell

+1

Давайте всё же отталкиваться от рекурсивного определения факториала

ну так он и есть рекурсивный :)

jtootf ★★★★★
()

[х] Нет, мне сказали, что лисперов любят девушки. [х] В Советской России Лисп пишет на тебе! [x] Нет, я - сишник. [х] Нет, и не собираюсь

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

> Ээ, это чит! Давайте всё же отталкиваться от рекурсивного определения факториала :)

это не чит, это хаскелл =) кроме того, как правильно заметил jtootf, product рекурсивна (а точнее видимо foldl) =)

korvin_ ★★★★★
()
Ответ на: И тут снова я! от yoghurt

«Странно», что в хорошей книге http://mitpress.mit.edu/catalog/item/default.asp?ttype=2&tid=11866 используется псевдо-код в стиле С и Паскаля, а не Лиспа. Да ещё с инфиксным безобразием. Сколько тупых людей вокруг, лисповое золото под ногами валяется, берите и радуйтесь, а они ни в какую. Секта лисперов такая секта.

anonymous
()
Ответ на: комментарий от yoghurt
(defun factorial (n)
  (loop
    repeat n 
    for i upfrom 0
    for result = 1 then (* result i)
    finally (return result)))

(defun factorial (n)
  (cond
    ((= n 0) 1)
    ((> n 0) (* n (factorial (- n 1))))
    (T (error "Not valid for negative integers"))))

Оба варианта - читабельнее приведенного.

а то self какой-то, да еще и хрен распарсишь взглядом что там с чем ассоциировано - набор токенов какой-то, и галочки смешные зачем-то повсюду

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

>product рекурсивна (а точнее видимо foldl)

Я немного не в теме. А как выглядит в свою очередь сама product? Если это не примитив языка

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

Уж люди из университетов, профессора, касалось бы Лисп должен владеть их умами. Ан нет. Не владеет, псевдо коды изобретают, не похожие на Лиспы.

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

А если n < 0, ась?

*Main> let fact n = product [1..n]
*Main> fact (-2)
1

А как выглядит в свою очередь сама product?

http://haskell.org/ghc/docs/latest/html/libraries/base-4.2.0.0/src/Data-List.html#product

product                 :: (Num a) => [a] -> a
#ifdef USE_REPORT_PRELUDE
sum                     =  foldl (+) 0
product                 =  foldl (*) 1
#else
sum     l       = sum' l 0
  where
    sum' []     a = a
    sum' (x:xs) a = sum' xs (a+x)
product l       = prod l 1
  where
    prod []     a = a
    prod (x:xs) a = prod xs (a*x)
#endif

как-то так - либо через foldl, либо через явную рекурсию

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

> Уж люди из университетов, профессора, касалось бы Лисп должен владеть их умами. Ан нет. Не владеет, псевдо коды изобретают, не похожие на Лиспы.

успокойся уже. тебя лиспер избил? поделом.

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

> Уж люди из университетов, профессора, касалось бы Лисп

должен владеть их умами


У вас больные фантазии на тему того, что все должны быть одинаковыми и признавать общий идеал. Вы случайно не из «Наших»?

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

И foldl, как я понимаю, тоже в свою очередь как то выглядит..

Ну вот, т.е. это всё по сути можно назвать частью стандартной библиотеки Хаскеля? Тогда ваш

product[1..n]
равносилен
n factorial
в St ^_^

yoghurt ★★★★★
()
Ответ на: комментарий от unC0Rr
product =  foldl (*) 1

кстати, единственное из определений, наглядно использующее тот факт, что (Num, *, 1) является моноидом. впрочем, это не к спору о языках, это так - лирическое отступление

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

равносилен

не равносилен. вот если в St есть свёртка чисел по умножению - тогда да, определить факториал через неё можно аналогично

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

Ну и зачем все эти красивости? product = foldl (*) 1 и т.п. Суровая действительность прекрасно справляется с такими делами: r = Factorial(f). А Factorial в свою очередь может быть самописным, так и библиотечным. А библиотечным хоть на С, Перле, Асме и т.п.

anonymous
()
Ответ на: И тут снова я! от yoghurt

Нет конечно. Тут надо понимать семантику: все с рождения знают о self, [], ^? По твоему это очень похоже на естественный язык?

Уверен, что любой крестофил (знаю живой пример клоуна-крикуна, любящий цепепе за его, якобы, человечность; сука!!!!!! я его ненавижу!!!!; простите за лирическое отступление, просто этот дегенерат мой team leader) проблюётся со словами «это не по-человечески!», что на самом деле означает «это же не C++! ничего другого я не знаю и знать не хочу. я же ярый быдлокодер! паника!!! паника!!! паника!!!».

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

Ну и для чего это product = foldl (*) 1? Вот практическая задача прочитать ХМЛ файл и записать в него факториалы там, где поле результата не заполнено, есть только поле данных. Расскажите про мощь Лиспа или Хаскела, которые уделают по скорости разработки и скорости выполнения всякие там Явы с Диезами. Или тоже самое с реляционной БД, где вместо файла ХМЛ таблица.

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

Для этого специальные языки есть. Глупо выбирать язык общего назначения, когда можно использовать специализированный.

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

вот если в St есть свёртка чисел по умножению - тогда да, определить факториал через неё можно аналогично

trueFactorial
    self <= 0
        ifTrue:  [self error: 'Oops!']
        ifFalse: [^ (1 to: self) inject: 1 into: [:acc :each | acc * each ]]

Делаем интервал от 1 до n, пробегаемся по нему, доумножая аккумулятор, начально равный 1, на каждое число, получаем факториал. Чтобы вычислить сумму чисел интервала, достаточно * поменять на + :)

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

Кстати, вы так и не ответили на вопрос, зачем нужно совершенно разные мысли на разных языках выражать одинаковой записью. Только пытались переложить ответственность за опровержение на оппонента.

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

> Вот практическая задача прочитать ХМЛ

О, отличная задача, я такое люблю, давай ты привдёшь решение базе Java или C#, я покажу своё на базе своей cl-libxml2? Или там на каком языке будет проще расширения к XSLT процессору писать?

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

А Factorial в свою очередь может быть самописным, так и библиотечным

может. и что?

Вот практическая задача

да ну?

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

здорово :) хотя запись и непривычная, но вполне читаемая

хотя логика тотальной объектности немного выворачивает мозг

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

> *Main> let fact n = product [1..n]

*Main> fact (-2)

1

Лень читать тред, кто-то уже сказал «трололо»?

Где вся мощь хаскельной системы типов, я спрашиваю? %)

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

>сложные математические формулы лучше всего читаются в математической нотации - двумерной, с регистрами, и половиной юникода в символах

Ну я об этом там и написал дальше =). Но если уж брать то, что есть, то я порой предпочту префиксную =)

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

>Почему же из двух старичков Лиспа и Фортрана математика осела на инфиксном Фортране, а не Лиспе?

А ты думаешь, что из-за синтасиса? ILOL'D

Waterlaz ★★★★★
()
Ответ на: И тут снова я! от yoghurt

>Наверно, имеется ввиду выразительность, сходная естественному языку.

Это скорее имеет больше отношение к семантике, чем к синтаксису.

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

Где вся мощь хаскельной системы типов, я спрашиваю?

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

http://hackage.haskell.org/trac/haskell-prime/wiki/Natural

кто-то уже сказал «трололо»?

я тонкий :)

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