LINUX.ORG.RU

CL


0

1

Помогите определиться с выбором:

SBCL, Clozure CL, CLISP. Может быть ещё что-то.

Критерии: наличие библиотек «на все случаи жизни», быстрота откомпилированного кода, удобство документации, наличие гуи-библиотеки, которая позволит сделать современный красивый интерфейс.

Спасибо.

p.s. и чтобы со SLIME работало.

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

> неправильно. ты перепутал

Кажется, я всё таки ничего не перепутал, кроме того, цитата не моя и встречается часто :)

но совершенно не говорит какие действия (шаги) нужно совершит


Вот-вот, всё дело в действиях (шагах), для которых должна быть указана последовательность. А фраза «как решить задачу» никак не указывает на шаги (действия) вычислений.

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

> Может привести и что?

Как «что»? Если программа может привести к ошибке - она не ФП!

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

> ls | sort | uniq

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

«ls /foo/bar | sort | uniq» - а вот это можно назвать функциональной программой при условии что а) мы будем считать что содержимое каталога /foo/bar не меняется б) пренебрегаем тем, что программа производит вывод на экран (меняет состояние) Чистота функции или программы вещь чисто субъективная, и определяется исходя из текущей ситуации. Иначе это понятие просто не имеет смысла.

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

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

С точки зрения автора программы?

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

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

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

Только GUI программы имеют жуткий побочный эффект :)

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

> Например, классический юникс-вей можно под определенным углом

рассматривать как пример удачной функциональной декомпозиции.


Под каким? Что же всё таки такое ФП? К одноименной области математики оно получается никакого отношения не имеет?

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

>Чистота функции или программы вещь чисто субъективная, и определяется исходя из текущей ситуации. Иначе это понятие просто не имеет смысла.

Для чистоты можно ввести понятие «Реальный мир» который в процессе работы программы «вычисляется». Монада IO - хороший тому пример.

К такой программе уже по поводу чистоты не придерёшся.

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

>> ls | sort | uniq

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

То есть программа, в которой есть ввод-вывод - это по определению не функциональная программа?

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

> Мде.

А что не нравится? :)

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

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

Есть такие пуристы, которые считают, что функциональный язык обязан быть чистым. Но не все так думают :)

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

> Что же всё таки такое ФП? К одноименной области математики оно получается никакого отношения не имеет?

К какой еще области? Есть функциональный анализ. Ты про него?

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

> А что не нравится? :)

Туманность определения. По-моему, точного и полезного определения функционального программирования не существует. Вот в fprog#3 дано разъяснение того, что такое ФЯП.

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

> Считается, что функциональный подход лучше подходит

для разработки очень сложных систем, чем тот же ООП.


Ну разве что поклонниками Haskell :) Или кем-то ещё?

К какой еще области? Есть функциональный анализ. Ты про него?


Нет, я про раздел дискретный математики, называющийся «функциональное программирование».

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

> Вот в fprog#3 дано разъяснение того, что такое ФЯП.

Но это же не я.п. Это подход к построению систем. Другой уровень.

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

> Нет, я про раздел дискретный математики, называющийся «функциональное программирование».

Сам математик по образованию, но о таком не слышал. Может быть, что-то новое?

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

>> Вот в fprog#3 дано разъяснение того, что такое ФЯП.

Но это же не я.п. Это подход к построению систем. Другой уровень.

На уровне построения систем говорить о ФП вообще не приходится - слишком всё сложно (и императивно, да).

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

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

Есть ли связь между ФП и λ-исчислением (уж это точно математическая дисциплина)? Из всего сказанного вами ранее, вытекает что нет. Так?

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

> уж это точно математическая дисциплина

Ни разу. Всего лишь формальная система. )))

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

> Есть ли связь между ФП и λ-исчислением (уж это точно математическая дисциплина)? Из всего сказанного вами ранее, вытекает что нет. Так?

Как это? Из-за «юникс-вея»?

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

> Как это? Из-за «юникс-вея»?

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

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

>Знаешь, выучи окамл. А потом можем снова вернуться к вопросу.

Cудя по всему он знает javascript, тогда ocaml тут не к чему. Там почти такие же изменяемые состояния.

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

Извините, что прерываю, не хочу новую ветку открывать.

emacs, slime, sbcl, cl-sdl в убунте, поставлены apt-get -ом. Первые три работают.

http://thawacoupiekak.blogspot.com/search/label/ubuntu%20linux%20lisp%20sbcl%20sdl

... You need cl-sdl and cl-sdl-mixer to play the alarm song. ...

cl-sdl поставил, пример по ссылке выше сохранил в файл, запустил slime, там запущен REPL, набираю:

(load "test.lisp")

оно ругается:

READ failure in COMPILE-FILE: SB-INT:SIMPLE-READER-PACKAGE-ERROR at 594 (line 21, column 9) on #<SB-SYS:FD-STREAM for «file /home/reaper/test-1.lisp» {AB9C311}>: package «SDL» not found [Condition of type SB-C::INPUT-ERROR-IN-COMPILE-FILE]

как его запустить?

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

пы.сы. в REPLе SBCLа оно тоже ругается на отсутствие SDL, в общем, как правильно ставить cl-sdl в убунте? :)

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

Ну т.е. вы отрицаете общепринятое определение ФП, фактически отрицаете связь с λ-исчислением, не возражаете против использования циклов и присваиваний внутри реализации функции и обосновываете утверждение, что Common Lisp является ФЯП тем мнением, что OCaml это тоже ФЯП?

Cудя по всему он знает javascript, тогда ocaml тут не к чему.

Там почти такие же изменяемые состояния.



Вкупе с предыдущим это тянет за собой утверждение, что JavaScript это ФЯП, что Python это ФЯП, что Lua это ФЯП, что Perl это ФЯП и т.д. Т.е. фактически все современные динамические языки автоматом попадают в категорию ФЯП. А вот для статически типизированных языков надо ещё смотреть поддерживают ли они замыкания (а то бы мы и C с лёгкостью записали в ФЯП).

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

> cl-sdl поставил

Что значит поставил? Что вы под этим имеете в виду? Вы настроили asdf? Создали симлинк? Смогли загрузить cl-sdl в SBCL?

Вообще, самый простой способ для начала использовать clbuild: http://common-lisp.net/project/clbuild/ - там есть поддержка и для sdl.

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

Эээ... нет. «Поставил» - имел в виду apt-get install cl-sdl. clbuild понял, сеньк.

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

неправильно. ты перепутал

Кажется, я всё таки ничего не перепутал, кроме того, цитата не моя и встречается часто :)

но совершенно не говорит какие действия (шаги) нужно совершит

Вот-вот, всё дело в действиях (шагах), для которых должна быть указана последовательность. А фраза «как решить задачу» никак не указывает на шаги (действия) вычислений.

всё-таки я настаиваю, что перепутал =)

Декларативное программирование

Согласно первому определению, программа «декларативна», если она описывает каково́ нечто, а не как его создать. Например, веб-страницы на HTML декларативны, так как они описывают что должна содержать страница, а не как отображать страницу на экране.

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

> всё-таки я настаиваю, что перепутал =)

А я - что нет. Разве я говорил про декларативное программирование? Я говорил про функциональное, которые является специальным случаем.

Тут недавно обсуждали как жарить яичницу, вот я предлагаю рецепт омлета, как мне кажется вполне функциональный: «Подать на стол посыпанную зеленью жаренную смесь содержимого 6 куриных яиц и стакана коровьего молока». Что в вашем понимании будет декларативным стилем: «Хочу омлет вкусный»?

Кстати, статья про «Декларативное программирование» что по ссылке - фуфло, ибо там рассматривается XSLT как основной пример, что совершенно не верно, ибо XSLT как раз и есть функциональный язык.

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

Хелп, где взять рабочий clbuild?

darcs get http://common-lisp.net/project/clbuild/clbuild

Finished getting.

Warning: CRC errors found. These are probably harmless but should be repaired.
See 'darcs gzcrcs --help' for more information.

cd clbuild

./clbuild check



Checking for helper applications...
found /usr/bin/cvs
found /usr/bin/svn
found /usr/bin/darcs
found /usr/bin/wget
found /usr/bin/hg
found /usr/bin/curl
found /usr/bin/git
found /bin/mktemp
Success: All helper applications found.

Checking Lisp startup...
Success: Lisp starts up using «/usr/bin/sbcl»

Looking for installable systems...
ls: невозможно получить доступ к /home/tirnanog/bin/clbuild/systems/*.asd: No such file or directory
0 system definition files registered

darcs gzcrcs --check
darcs gzcrcs --repair

не помогают.

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

>Ну т.е. вы отрицаете общепринятое определение ФП, фактически отрицаете связь с λ-исчислением, не возражаете против использования циклов и присваиваний внутри реализации функции и обосновываете утверждение, что Common Lisp является ФЯП тем мнением, что OCaml это тоже ФЯП?

Лично я называю ФЯП всё что поддерживает замыкания и ... собственно этого и достаточно. Даже если замыкания не родные а прикручены как костыль из boost.

Вкупе с предыдущим это тянет за собой утверждение, что JavaScript это ФЯП, что Python это ФЯП, что Lua это ФЯП, что Perl это ФЯП и т.д. Т.е. фактически все современные динамические языки автоматом попадают в категорию ФЯП.

Динамическим языкам проще с замыканиями, на то они и динамические. Для них в случае чего можно даже придумать аналог __call__ в python, apply в javascript и operator() в C++ (а ведь он статический). Кроме того подъязык шаблонов в C++ вполне функциональный, так как аргуметом шаблона может быть и функция.

Всё это я к чему... настоящий хаскелист на любом языке будет писать на хаскеле.

Ну а тот факт что CL не поощряет функциональный стиль я уже учёл и глубоко изучать CL не собираюсь(спасибо за подсказку).

PS тут есчё надо различать «допускает функциональный стиль» и «не допускает ничего кроме функционального стиля».

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

У тебя какая-то каша. Я считаю, что изучения хаскеля не дает полной картины об ф.п. К тому же, в нем сложно разобраться. Порою запудривает окончательно мозги (что мы уже видели здесь на ЛОРе). Необходимо что-нибудь по-проще, но такое, чтобы не вызывало сомнений, раз для тебя CL - не ф.п.

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

> У тебя какая-то каша.

Это у меня каша? При том, что я самого начала придерживаюсь нескольких широко известных определений, и ни шага с них не отхожу? А вы не даете прямого ответа ни на один принципиальный вопрос, не можете сформулировать не одного определения, вместо чего отсылаете изучать OCaml, который якобы должен всё прояснить? Ну знаете...

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

> А я - что нет. Разве я говорил про декларативное программирование? Я говорил про функциональное, которые является специальным случаем.

тем не менее, фп весьма декларативно, явно более декларативно, чем императивно =)

Тут недавно обсуждали как жарить яичницу, вот я предлагаю рецепт омлета, как мне кажется вполне функциональный: «Подать на стол посыпанную зеленью жаренную смесь содержимого 6 куриных яиц и стакана коровьего молока». Что в вашем понимании будет декларативным стилем: «Хочу омлет вкусный»?

функциональность не противоречит декларативности, это не взаимоисключающие качества. в данном случае твой рецепт вполне декларативен, а будь он подобного вида:

1) взять 6 куриных яиц и стакан коровьего молока;

2) смешать их;

3) взять сковороду

...

n) PROFIT!!

тогда бы он не был ни декларативны, ни функциональным.

Кстати, статья про «Декларативное программирование» что по ссылке - фуфло, ибо там рассматривается XSLT как основной пример, что совершенно не верно, ибо XSLT как раз и есть функциональный язык.

а я и не настаивал на ее качестве, однако первое определение с HTML в качестве примера вполне отражает суть.

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

> Лично я называю ФЯП всё что поддерживает замыкания и ... собственно этого и достаточно.

А что, тоже позиция. Только тогда Питон, Руби, Перл и прочая попса получаются ФЯП :)

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

Про типы данных забыли, которыми должны оперировать функции. Последняя статья fprog#3. Хотя стоит ли считать статическую типизацию, вывод типов и типоклассы атрибутами ф.п. - вопрос.

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

Где искать список того, что может поставить clbuild, в частности, как называется sdl пакет?

В твоём таже самая ошибка вываливается на check, но после того как попробовал успешно поставить cl-ppcre, оно стало нормально проходить check.

Вообще, где читать про то что надо какую-то символьную ссылку создавать после инсталяции дебиановского пакета cl-sdl и что-то там делать в SBCL?

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

Так у кого каша то? И почему вы до сих пор не сформулировали чёкой позиции по обсуждаемому вопросу? Казалось бы математическое образование должно этому способствовать....

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

> Про типы данных забыли, которыми должны оперировать функции.

Не я же это забыл :) Но я не понимаю, что не так с типами данных Питона.

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

> тем не менее, фп весьма декларативно

Ну я так и говорил, что ФП это разновидность деклативного...

в данном случае твой рецепт вполне декларативен


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

однако первое определение с HTML в качестве примера

вполне отражает суть.



Разве HTML это язык программирования? Как можно рассуждать о ЯП на примере формата данных?

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

> Где искать список того, что может поставить clbuild,

Ну, дык:
./clbuild projects

Вообще, где читать про то что надо какую-то символьную ссылку

создавать после инсталяции дебиановского пакета cl-sdl



Мануал на asdf (http://common-lisp.net/project/asdf/)? В debian используется каталог /usr/share/common-lisp/, внутри которого есть каталог systems. По идее, при установке штатным способом там должно всё появится. Только ещё вероятно надо научить SBCL понимать это.

Но, лучше забить на систему пакетов Debian, ибо для Common Lisp там одно старьё, да и того мало. Единственный дистрибутив, для которого сейчас есть вменяемая поддержка CL это Gentoo. Для других систем лучше сразу смотреть на clbuild, asdf-install и т.п.

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

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

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

я же подразумевал «как» в значении «как добиться результата». на этот вопрос Ваш «рецепт» не отвечает. собственно его и рецептом назвать можно лишь с условием, что все люди знают или интуитивно понимают как готовится омлет =)

Разве HTML это язык программирования? Как можно рассуждать о ЯП на примере формата данных?

не программирования, но язык. и весьма-таки декларативный =)

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

> Но я не понимаю, что не так с типами данных Питона.

А как там с ADT и паттерн-матчингом для последнего?

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

>> Но я не понимаю, что не так с типами данных Питона.

А как там с ADT и паттерн-матчингом для последнего?

Никак. Точнее, можно только вручную.

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

> на этот вопрос Ваш «рецепт» не отвечает. собственно его и рецептом назвать можно лишь с условием, что все люди знают или интуитивно понимают как готовится омлет

собственно это особенность не конкретно этого рецепта, а декларативности вообще, чем более рецепт декларативен, тем он «менее рецепт» и более «определение блюда» =)

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

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

их стоит считать атрибутами System F. всегда ваш, К.О.

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

> Лично я называю ФЯП всё что поддерживает замыкания и ... собственно этого и достаточно.

А что, тоже позиция. Только тогда Питон, Руби, Перл и прочая попса получаются ФЯП :)

ага, а с учётом того, что объекты - это замыкания для бедных, всякие там Java, C#, C++, и Delphi - ничуть не менее ФЯП :)

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