лисп

Feb. 8th, 2003 01:49 pm
avva: (Default)
[personal profile] avva
Я учу Lisp (язык программирования такой, для тех, кто не знает). Немного стыдно, что до сих пор его не знал (совсем простые куски кода я умею читать, подцепил где-то случайно, в emacs'е скорее всего; но писать не могу, и язык по-настоящему не понимаю), но как-то не нужен он мне был. Да он мне и сейчас не нужен особенно, но захотелось вот заполнить эту лакуну. От лакуны к лакуне -- так, глядишь, и дойдёшь до чего-то хорошего.

Взял в библиотеке две книги пару недель назад: Lisp (Winston&Horn, 3rd edition), и Programming in Common Lisp (Brooks). Сегодня начал их читать, и если найду ещё немного времени, скачаю и установлю какой-нибудь Лисп поиграться.

Книга Винстона и Хорна более подробна, основательна; вместе с тем более "попсовая" что ли. В тексте сквозит настойчивое стремление объяснить читателю, что Лисп - это совсем не страшно. Вместо car и cdr всегда используются first и last. И много ещё подобных мелочей. Книга Брукса куда более лаконична, написана более уверенным тоном и для людей, уже что-то знающих и уверенных в себе.

Концептуальная простота Лиспа меня восхищает. Я вообще очень падок на концептуальную простоту, и потому очень люблю, например, Smalltalk и Forth, хоть и не работал в них сколько-нибудь долго, не писал ничего действительно серьёзного. Теперь Лисп, наверное, присоединится к этому списку.

Date: 2003-02-08 05:34 am (UTC)
From: [identity profile] cmm.livejournal.com
> Я думал было учить Схему, а не Лисп, но решил, что всё же от Схемы более попахивает ученичеством.

точно-точно.   Схема концептуально "элегантнее", но работать с ней разумно только академикам, да.

а стандарт у нея меньше, потому что в нём нету нифига.   обожаю просто этот аргумент.

ежели книжков на бумаге хочешь, так у меня их есть.

Date: 2003-02-08 05:53 am (UTC)
From: [identity profile] bety.livejournal.com
ага, и еще некоторые почему-то считают, что кроме академиков, Схему просто обязаны изучать студенты первого курса, в качестве самого первого компьютерного предмета, вообще. А на потом говорят, что цикл "while", это типа итеративной рекурсии, только проще :)

Re:

Date: 2003-02-08 06:04 am (UTC)
From: [identity profile] cmm.livejournal.com
экономия концепций -- сама по себе вещь хорошая.

но увлекаться, конечно, не стоит. :)

Date: 2003-02-08 06:52 am (UTC)
From: [identity profile] angerona.livejournal.com
Еще как обязаны. Я как раз с ними полностью согласна -- очень помогает во всем потом, тем более, что этот самый курс обычно направлен не на изучение Схемы, а на изучение основных принципов программирования (и иллюстрируется программами на схеме). Зная схему и этот курс, все остальное действительно становится легче.

Date: 2003-02-08 11:35 am (UTC)
From: [identity profile] bety.livejournal.com
Я не спорю, что такой курс весьма полезен, но только в том случае, если слушатели имеют уже хотя бы самое элементарное представление о программировании. Ведь согласитесь, что рекурсия сама по себе, отнюдь не проста для восприятия, и человек, которому её показывают ещё до того, как он толком понял что такое "if.. then.." чувствует себя несколько потерянно. Лично мне было легко, поскольку я учила в школе Паскаль (да и рекурсию тоже), но среди моих сокурсников, было довольно много, совсем не глупых людей, которым пришлось с этим курсом тяжко.
Возможно, что тем, которым удалось справиться и было потом в чем-то проще, но все равно не вижу причин создавать такие сложности. Разве только, чтобы отсеивать народ, что они с успехом и делают.

Date: 2003-02-08 12:02 pm (UTC)
From: [identity profile] angerona.livejournal.com
Нет, мне кажется, что это полезно тем, у кого нет никакого знакомства с программированием. У меня как раз никаких абсолютно навыков не было -- и вы правы, что рекурсия, как первый элемент обучения, совсем нетривиально. Требуется обьяснение и время, чтобы мозги повернулись именно так, как надо -- но происходит некий сдвиг и раз, и оно становится понятным.

Как раз наоборот те, у кого были какие-то навыки других языков, часто отказывались понимать и продолжали думать стандартными строками из C или паскаля. Мне кажется, что они воспринимали слишком близко сам язык и слишком расплывчиво то, что они пытались этим языком сказать. А обучение Схеме, как первому языку, как раз выбивает этот симбиоз смысла и слов и, наоборот, учит различать то, что надо запрограммировать от того, как выглядят строительные блоки языка.

Date: 2003-02-08 01:43 pm (UTC)
From: [identity profile] bety.livejournal.com
Как раз наоборот те, у кого были какие-то навыки других языков, часто отказывались понимать и продолжали думать стандартными строками из С или паскаля.
Мне как раз такие "те" казались скорее исключением , нежели чем правилом. Хотя наверняка это все очень индивидуально и круг знакомств на курсе в любом случае не является достаточным для статистической выборки :)

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

Date: 2003-02-08 02:55 pm (UTC)
From: [identity profile] angerona.livejournal.com
То что Схема, "учит различать то, что надо запрограммировать от того, как выглядят строительные блоки языка", безусловно верно, но так ведь он же не единственный -- на всех предметах впоследствии в качестве языка для объяснения алгоритмов используется псевдокод, что тоже приучает мыслить абстрактно.


Абсолютно верно. Но тогда Схема явно не хуже для обучения, чем другие языки (а какой то предмет все равно должен выбрать язык, чтобы студенты могли на практике попробовать концептуальные идеи). Тогда почему бы не Схему? Как раз он хорош тем, что, как сказали другие, все правила очень просты и все правила языка умещаются в тонкую брошюрку. Студентик может сразу пойти в лабораторную и написать:

(define (power a b)
(if (= b 0) 1 (* a (power a (- b 1)))

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

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

Date: 2003-02-09 04:24 am (UTC)
From: [identity profile] bety.livejournal.com
Правила просты (и это тоже тут уже говорили), потому что функциональность маленькая. Ведь если соответственно сократить Паскаль -оставить только целые числа, убрать практически все стандартные функций, указатели etc., я думаю, его правила не займут намного больше.
А хуже Схема, на мои взгляд, все-таки тем, что рекурсивное мышление не совсем естественно, или просто нам не привычно. Действительно, как Вы говорите, в какой-то момент происходит щелчок и рекурсия усваивается, но зачем так усложнять абсорбцию ? :)
Безусловно Вы правы в том , что какой-то язык нужен, чтобы начинающие сами могли "пощупать" идеи на практике, но разве не проше это делать на языке, пусть даже и с более сложным синтаксисом, но более близком нашему восприятию ? Ведь не обучают же детей в первом классе двоичному исчислению, хотя цифорок там и меньше.
P.S Если Вы хотите, мы можем перенести эту дискуссию в Ваш или мой журнал, потому что боюсь, что мы уже утомили Анатолия :)

Date: 2003-02-09 06:49 am (UTC)
From: [identity profile] angerona.livejournal.com
Да нет, функциональности там совсем не меньше -- ну назовите что-нибудь, что можно сделать в Паскале, чего нельзя сделать в Схеме. Функциональность, про которую говорили другие люди, немного другая -- на Схеме сложнее написать огромные проэкты, в которых участвуют много людей. Это да, но этого в классе не требуется. Все остальное на ней делается замечательно.

Позвольте, какие только целые числа? Более красивых математических решений, чем на схеме, я не видела. Если использовать streams, то вообще получается замечательно красиво. А рекурсия -- как раз очень сильный концепт и такой, который понять надо. Вот все эти if, then, понимаются очень просто (тем более, что и в схеме они есть).

Я честно говорю с опытом: 4 года помогала преподавать этот самый начальный класс на схеме. Один семестр мы попробовали сделать это на Java (ну или совместить со схемой) -- это был такой страшный бардак, что стонали и студенты и преподаватели и профессора сказали что больше такого извращения не будет. Ну попробуйте написать компайлер или евальюэтор на джаве -- сколько для этого понадобится строк и файлов? И сколько будет ошибок? Можно ли это давать как одно (!) домашнее задание в начальном классе? (да, пусть тот евальюэтор, что студенты пишут на схеме, не совсем сильный, и оптимизации в нем нет, но ведь они изучают и понимают саму концепцию). Или object-oriented adventure game тоже за одно домашнее задание? пусть там нет gui -- пусть там только текст, как встареньком MUDe, но пишут же.

То, что вы сказали про схему против паскаля зависит не от схемы, а от разных типов языков -- типированных против нетипированных. Нетипированных тоже много -- схема, лисп, smalltalk, еще куча, я уверена. Затевать спор про то, какие из них лучше, не будем -- это излюбленная тема спора, вроде big-endian vs. little-endian, и решения никогда не будет. Мне кажется, что для обучения, схема очень удобна.

Date: 2003-02-09 07:36 am (UTC)
From: [identity profile] bety.livejournal.com
"Да нет, функциональности там совсем не меньше -- ну назовите что-нибудь, что можно сделать в Паскале, чего нельзя сделать в Схеме."

Не назову и даже пытаться не буду :) Они оба, как мы с Вами прекрасно знаем, эквивалентны машине Тюринга. Под функциональностью я (и мне кажется другие тоже) имела ввиду всякие удобства, или даже не знаю, как это иначе назвать -- в общем то, из-за чего машине Тюринга на практике предпочитают другие языки.

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

Date: 2003-02-09 09:14 am (UTC)
From: [identity profile] cmm.livejournal.com
> Под функциональностью я (и мне кажется другие тоже) имела ввиду всякие удобства, или даже не знаю, как это иначе назвать -- в общем то, из-за чего машине Тюринга на практике предпочитают другие языки.

экспрессивность.

Date: 2003-02-09 01:39 pm (UTC)
From: [identity profile] bety.livejournal.com
О! Спасибо :)

Date: 2003-02-10 01:01 am (UTC)
From: [identity profile] sobaker.livejournal.com
Нет, на первом курсе надо учить Смоллтоку.

Правда, тогда на третьем не получится учить С++ - студентов вырвет.

Date: 2003-02-10 04:32 am (UTC)
From: [identity profile] bety.livejournal.com
"Тигры любят всё! Кроме желудей С++ !" :)

Date: 2003-02-08 07:24 pm (UTC)
From: [identity profile] bish0nen.livejournal.com
а стандарт у нея меньше,

Размер стандарта Схемы - не фетиш и не самоцель, разумеется. Но вот, например, от миллиона стандартизированных способов доступа к элементу массива/sequence в Лиспе (svref мы будем использовать потому, что он оптимизирован для одномерных массивов, а aref - нет) - от этого, право же, просто навзрыд рыдать хочется.

потому что в нём нету нифига. обожаю просто этот аргумент.

В какой степени это правда (отсутствует штатная объектная система), но у Схемы теперь есть SRFIs, которые заполняют многие дыры. Некоторые реализации Схемы приходят со своими очень интересными расширениями (weak boxes, fluids, will executors, units w/ signatures etc), отсутствующими в других реализациях, к сожалению.

Re:

Date: 2003-02-09 02:04 am (UTC)
From: [identity profile] cmm.livejournal.com
я, собственно, очень хорошо знаю Схему. :)
DrScheme -- красивая штука, например.

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

мне так же не нравится, что самая популярная имплементация может кардинально (и не всегда совместимо) изменяться от версии к версии.   с этим можно жить, но неприятно.   я боюсь использовать research vehicles для работы.

SRFI -- не замена нормальному стандарту.

принцип "one namespace for functions and variables" мне кажется весьма неудобным.   стандартизованная система обработки ошибок и CLOS мне кажутся совершенно необходимыми.   от continuations я вижу больше вреда и путаницы, чем пользы.   ситуация вокруг конструкта dynamic-wind меня просто смешит.

а наличие трёх разных способов добраться до элементов массива я уж как-нибудь переживу, да.

Date: 2003-02-09 07:23 am (UTC)
From: [identity profile] bish0nen.livejournal.com
но мне очень не нравится общая атмосфера вокруг Схемы. такой язык с огромным, видным отовсюду пупком, и соответствующим образом ведущие себя адепты.

Это можно сказать про любой язык, главное - найти адептов.

Re:

Date: 2003-02-09 09:07 am (UTC)
From: [identity profile] cmm.livejournal.com
нет, не про любой.
community -- очень важный аспект любой технологии.

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 29th, 2025 03:56 pm
Powered by Dreamwidth Studios