Концепции, которые вас удивили, когда вы читали SICP?

SICP - «Структура и интерпретация компьютерных программ»

Объяснение для того же было бы неплохо

Может кто-нибудь объяснить о металингвистической абстракции

10.12.2008 08:21:37
stackoverflow.com/questions/1711/… книга, которую я упоминаю, находится на третьем
yesraaj 10.12.2008 08:48:43
Как, черт возьми, вы положили награду на субъективный вопрос? Особенно тот, который так тесно связан с личным опытом?
AnonJr 28.01.2009 21:05:57
Я думал о том же самом?
JesperE 28.01.2009 21:52:05
не было ответов на этот вопрос без щедрости
yesraaj 29.01.2009 04:00:49
Так что поменяй вопрос потом. Это все равно, что вручить золотую медаль пловцу за лучший рассказ о тренировках - приятно читать, но не достойно медали.
AnonJr 29.01.2009 17:02:20
12 ОТВЕТОВ
РЕШЕНИЕ

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

Я понимал это раньше, когда думал об универсальных машинах Тьюринга (вход в UTM - просто представление программы) или архитектуре фон Неймана (где единая структура хранения содержит и код, и данные), но SICP сделал эту идею намного более ясной , Схема (Лисп) помогла здесь, так как синтаксис для программы точно такой же, как синтаксис для списков в целом, а именно S-выражений.

Как только вы получите «эквивалентность» кода и данных, внезапно многие вещи станут легкими. Например, вы можете писать программы, которые имеют разные методы оценки (ленивый, недетерминированный и т . Д. ). Раньше я мог подумать, что это потребует расширения языка программирования; на самом деле, я могу просто добавить его к языку, таким образом позволяя базовому языку быть минимальным. В качестве другого примера вы можете аналогичным образом реализовать объектно-ориентированную структуру; опять же, это то, что я, возможно, наивно думал, потребует изменения языка.

Между прочим, я хотел бы, чтобы SICP упомянул больше: типы. Проверка типов во время компиляции - удивительная вещь. Реализация SICP объектно-ориентированного программирования не имела этого преимущества.

22
27.01.2009 13:10:47
Хех ... запись в сборке - это то, что заставило меня смотреть на код и данные как на одно и то же. Иногда я до сих пор скучаю по нему - переписывание переходов, возможно, было не самым понятным способом как сохранить, так и обработать состояние программы, но это, конечно, было кратко . :-)
Ben Blank 30.01.2009 18:19:14

Я еще не читал эту книгу, я только посмотрел видео-курсы, но она многому меня научила. Функции как первоклассные граждане были сногсшибательными для меня. Выполнение «переменной» было чем-то очень новым для меня. После просмотра этих видеороликов то, как я теперь вижу JavaScript и программирование в целом, сильно изменилось.

О, я думаю, что я солгал, меня поразило то, что + была функция.

9
27.01.2009 10:06:07
Ionuț G. Stan 1.02.2009 18:56:38

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

3
27.01.2009 10:51:17

То, что я думал, было действительно здорово, было потоками с отсроченной оценкой. Я думал, что генерация простых чисел была действительно опрятной. Как распределитель "PEZ", который волшебным образом распределяет следующее простое число в последовательности.

5
16.05.2019 16:20:02

Один пример «данные и код - это одно и то же» из ответа А. Рекса очень глубоко меня понял.

Когда я преподавал Lisp в России, наши учителя сказали нам, что язык был о списках: car, cdr, cons. Что поразило меня, так это то, что вам не нужны эти функции - вы можете написать свои собственные, с учетом замыканий. Итак, Лисп в конце концов не о списках! Это был большой сюрприз.

4
27.01.2009 13:32:12
Мне тоже понравилось это понимание.
A. Rex 27.01.2009 15:09:21

Я думаю, что самое удивительное в SICP - это увидеть, как мало примитивов требуется для создания полного языка Тьюринга - практически все может быть построено практически из ничего.

Поскольку мы обсуждаем SICP, я вставлю свой стандартный плагин для видеолекций по адресу http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/ , которые являются лучшим введением в Компьютерные науки вы можете надеяться получить через 20 часов.

5
28.01.2009 17:15:37

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

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

Сегодня, хотя SICP по-прежнему интересен и проницателен для многих, я понимаю, что он устарел. Во-первых, он не учит навыкам и инструментам отладки (я включаю в них системы типов), что крайне важно для работы в современных гигантских системах.

2
29.01.2009 02:42:40

Я почувствовал рекурсию в другом смысле после прочтения некоторых глав SICP

1
29.01.2009 16:23:26

Затворы.

Исходя из прежде всего императивного фона (Java, C # и т. Д. - я впервые прочитал SICP всего год или около того назад и сейчас перечитываю его), размышление в функциональном смысле было большим откровением для меня; это полностью изменило то, как я думаю о своей работе сегодня.

0
31.01.2009 00:22:40

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

2
1.02.2009 16:19:45

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

1
18.02.2009 18:09:15

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

В каждой главе есть идеи, которые меня удивляют:

Первые две главы показывают мне два способа абстрагирования реального мира: абстракция с процедурой и абстракция с данными.

Глава 3 представляет время в реальном мире. Это приводит к состояниям. Мы пробуем назначение, которое вызывает проблемы. Тогда мы пробуем потоки.

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

Поскольку оценщик в главе 4 сам по себе является программой на Лиспе, он наследует управляющую структуру базовой системы Лиспа. Итак, в главе 5 мы погрузимся в пошаговую работу реального компьютера с помощью абстрактной модели, регистрационной машины.

Спасибо.

0
15.05.2019 16:16:45