лисп

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: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
"Тигры любят всё! Кроме желудей С++ !" :)

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 04:14 pm
Powered by Dreamwidth Studios