Вы можете поделиться своими знаниями, улучшив их ( как? ) по рекомендациям соответствующих проектов .
« Структура и интерпретация компьютерных программ» (SICP) — книга, написанная Гарольдом Абельсоном , Джеральдом Джеем Сассманом и Джули Сассман.
В книге рассматриваются принципы и концепции компьютерного программирования , такие как абстракция в программировании, металингвистическая абстракция , рекурсия , интерпретаторы и модульное программирование . Впервые он был опубликован в 1985 г. издательством MIT Press и считается классикой компьютерных вычислений [ 2 ] , [ 3 ] .
В книге описываются концепции вычислений с помощью Scheme , диалекта Lisp . Кроме того, он использует неограниченную регистровую машину и ассемблер для реализации интерпретаторов и компиляторов Лиспа .
Примечания и ссылки
- (ru) Эта статья частично или полностью взята из статьи английской Википедии под названием « Структура и интерпретация компьютерных программ » ( см. список авторов ) .
- ↑ abc и dуведомление SUDOC .
- ↑ Джесс Джонсон, « Лучшие 9½ на книжной полке хакера » , su grokcode.com , 4 апреля 2008 г. (проконсультировался с 17 октября 2016 г. ) .
- ↑ Хаим Килов , « Структура и интерпретация компьютерных программ » , Byte , ноябрь 1986 г. , с. 70 .
внешняя ссылка
-
(ru) Полный текст на сайте MIT Press
Записи авторитета :
- Виртуальный международный авторитетный файл
- WorldCat
Источник: frpedia.wiki
Слушать книгу Структура и интерпретация компьютерных программ 2.5
geooooo/sicp-answers
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags
Nothing to show
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Cancel Create
- Local
- Codespaces
HTTPS GitHub CLI
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
Latest commit message
Commit time
README.md
Решения упражнений из книги Структура и интерпретация компьютерных программ
Слушать книгу Структура и интерпретация компьютерных программ 3.3
Здесь можно посмотреть решения к упражнениям, но лучше загляните на Wiki этого репозитория, там всё структурировано и имеются ответы на упражнения без кода =)
About
Решение упражнений в книге SICP
Источник: github.com
Структура и интерпретация компьютерных программ. SICP. Лисп.
Важно, чтобы мы, занимаясь информатикой, получали радость от общения с компьютером. С самого начала это было громадным удовольствием. Конечно, время от времени встревали заказчики, и через какое-то время мы стали серьезно относиться к их жалобам :-).
Надеюсь, что мы не превратимся в миссионеров. Не надо чувствовать себя продавцом Библий.
Разум: способность увидеть в машине больше, чем Вы видели, когда Вас впервые к ней подвели, увидеть, что Вы способны сделать её бóльшим.
Важно то, насколько хорошо они работают и как гладко стыкуются с другими программами при создании еще более крупных программ. Программист должен равно стремиться и к совершенству в деталях, и к соразмерности сложного целого.
Встречаться с тремя группами явлений: человеческий разум, совокупности компьютерных программ и компьютер.
Всякая компьютерная программа — это порожденная человеческим разумом модель реального либо умозрительного процесса.
Эти процессы, возникающие из нашего опыта и мысли, многочисленны, сложны в деталях, и мы всегда понимаем их лишь частично. Редко бывает так, что компьютерные программы отображают их к нашему окончательному удовлетворению, мы изменяем их по мере того, как наше восприятие модели приобретает все большую глубину, расширяется и обобщается, до тех пор, пока модель не достигнет метастабильного состояния.
Радостное возбуждение, сопутствующее компьютерному программированию, происходит из постоянного раскрытия в голове и в компьютере все новых выраженных в виде программ механизмов и из взрыва восприятия, который они порождают. Искусство выражает наши мечты. Компьютер исполняет их под видом программ!
Когда программы становятся большими и сложными, что с ними всегда и происходит, адекватность, непротиворечивость и корректность самих спецификаций становится предметом сомнений, так что большие программы редко сопровождаются полными формальными доказательствами корректности. Поскольку большие программы вырастают из малых, нам необходимо обзавестись арсеналом программных структур, в правильности которых мы можем быть уверены — их можно назвать идиомами — и научиться объединять их в структуры большего размера с помощью организационных методов, ценность которых также доказана.
Для умения создавать большие, значительные программы нет лучшего помощника, чем свободное владение мощными организационными методами.
И наоборот: затраты, связанные с написанием больших программ, побуждают нас изобретать новые методы уменьшения веса функций и деталей, входящих в эти программы.
Паскаль служит для построения пирамид — впечатляющих, захватывающих статических структур, создаваемых армиями, которые укладывают на места тяжелые плиты.
При помощи Лиспа порождаются организмы — впечатляющие, захватывающие динамические структуры, создаваемые командами, которые собирают их из мерцающих мириад более простых организмов.
Организующие принципы в обоих случаях остаются одни и те же, за одним существенным исключением: программист, пишущий на Лиспе, располагает на порядок большей творческой свободой в том, что касается функций, которые он создает для использования другими.
Программы на Лиспе населяют библиотеки функциями, которые оказываются настолько полезными, что они переживают породившие их приложения.
Ростом полезности мы во многом обязаны списку — исконной лисповской структуре данных. Простота структуры списков и естественность их использования отражаются в удивительной общности функций.
В Паскале обилие объявляемых структур данных ведет к специализации функций, которая сдерживает и наказывает случайное взаимодействие между ними. Лучше иметь 100 функций, которые работают с одной структурой данных, чем 10 функций, работающих с 10 структурами.
Пирамиде приходится неподвижно стоять тысячелетиями; организм же будет развиваться или погибнет.
Основные программистские заботы вычислительной инженерии и искусственного интеллекта стремятся к взаимопроникновению по мере того, как соответствующие системы увеличиваются в объеме.
В любой большой программной задаче один из важных принципов организации состоит в том, чтобы ограничить и изолировать потоки информации в отдельных модулях задачи, изобретая для этого язык.
По мере приближения к границам системы, где мы — люди — взаимодействуем чаще всего, эти языки обычно становятся все менее примитивными. В результате такие системы содержат сложные функции по обработке языка, повторенные по многу раз.
У Лиспа же синтаксис и семантика настолько просты, что синтаксический разбор можно считать элементарной задачей. Таким образом, методы синтаксического разбора не играют почти никакой роли в программах на Лиспе, и построение языковых процессоров редко служит препятствием для роста и изменения больших Лисп-систем.
Именно эта простота синтаксиса и семантики возлагает бремя свободы на всех программистов на Лиспе. Никакую программу на Лиспе больше, чем в несколько строк длиной, невозможно написать, не населив ее самостоятельными функциями. Находите новое и приспосабливайте; складывайте и стройте новыми способами!
Представьте себе новичка, который сначала испытывает проигрыватель, затем скрипку. Скрипка, говорит он, звучит ужасно.
Компьютеры, говорят они, хороши для определенных целей, но они недостаточно гибки. Так же и со скрипкой, и с пишущей машинкой, пока Вы не научились их использовать.
Марвин Минский.
Компьютерный язык — не способ заставить компьютер производить вычисления, а новое формальное средство выражения методологических идей. Программы должны писаться для того, чтобы их читали люди, и лишь во вторую очередь для выполнения машиной.
Не синтаксис определенного языка программирования, не умные алгоритмы для эффективного вычисления определенных функций, даже не математический анализ алгоритмов и оснований программирования, но методы управления интеллектуальной сложностью больших программных систем.
Наша цель — развить вкус к элементам стиля и эстетике программирования.
Овладеть основными методами управления сложностью в большой системе, уметь прочитать 50-ти страничную программу, если она написана в хорошем стиле.
В каждый данный момент понимать, чего сейчас не следует читать и что сейчас не нужно понимать.
Не должны испытывать страха перед модификацией программы, сохраняя при этом дух и стиль исходного автора.
Эти умения не исчерпываются компьютерным программированием. Методы одни и те же в любом техническом проектировании.
Мы управляем сложностью:
— с помощью построения абстракций, скрывающих, когда это нужно, детали.
— путём установления стандартных интерфейсов, которые позволяют нам строить системы из единообразных, хорошо понимаемых кусков.
— с помощью построения новых языков для описания проекта, каждый из которых концентрирует внимание на определенных деталях проекта и уводит его от других.
«Компьютерная наука» не является наукой и её значение мало связано с компьютерами.
Компьютерная революция — это революция в том, как мы мыслим и как мы выражаем наши мысли.
Появлении дисциплины, которую можно назвать компьютерной эпистемологией, — исследования структуры знания с императивной точки зрения, в противоположность более декларативной точке зрения классических математических дисциплин.
Математика дает нам структуру, в которой мы можем точно описывать понятия типа «что такое». Вычислительная наука дает нам структуру, в которой мы можем точно описывать понятия типа «как».