В чем разница между первым и вторым изданиями The Reasoned Schemer

У меня есть первое издание - я начал читать первое издание. Но сегодня я обнаружил, что есть второе издание. Насколько я должен быть обеспокоен? Есть ли между ними большая разница, или я упускаю несколько исправленных опечаток и хорошее введение?

1 ответ

Из введения в книгу, пытаясь подражать нотации без поддержки StackOverflow:

Начиная с первого издания

Со времени первого издания прошло более десяти лет, и многое изменилось.

Со времени первого издания внесены изменения в пять категорий. Эти категории включают изменения языка, изменения в реализации, изменения в Законах и заповедях , а также введение Перевода , изменения в прозе и изменения в том, как мы выражаем квазиквотированные списки.

В языке есть семь изменений. Во-первых, мы обобщили поведение cond e , fresh и run * , что позволило нам упростить язык, удалив три формы: cond i , all и all i . Во-вторых, мы ввели новую форму defrel , которая определяет отношения и заменяет использование define . Использование defrel не является строго необходимым - см. Обходной путь как часть сноски во фрейме 82 главы 1 и во фрейме 61 главы 10. В-третьих, теперь вызывает версию unify, которая использует происходит? до продления замены. В-четвертых, мы внесли изменения в интерфейс run * . run * теперь может принимать один идентификатор, например ( run * x (≡ 5 x)), что чище, чем нотация в первом издании. Мы также расширили run *, чтобы получить список из одного или нескольких идентификаторов, как в ( run * (xyz ) (≡ xy)). Эти идентификаторы привязаны к уникальным новым переменным, и преобразованное значение этих переменных возвращается в виде списка. Эти изменения применяются также к запуску n , который теперь записывается какзапустить n . В-пятых, мы удалили ключевое слово else из cond e , cond a и cond u , благодаря чему каждая строка в этих формах имеет одинаковую структуру. В-шестых, операторы, всегда o и никогда o , стали отношениями нулевых аргументов, а не целей. Наконец, в главе 1 мы ввели низкоуровневые двоичные дизъюнкции (disj2) и конъюнкции (CONJ 2), но только как способ объяснить Cond е и свежие .

...

В главе 10 мы определяем как можно большую часть реализации как функции схемы. Это позволяет нам значительно упростить макросы схемы в приложении А, которые определяют синтаксис нашего реляционного языка. Чтобы еще больше упростить реализацию, в приложении A определены два рекурсивных макроса справки: disj, построенный из #u а также disj_2; а также conj, построенный из #s а также conj_2.

...

Далее мы разъяснили законы и заповеди . В дополнение к этим улучшениям мы добавили явные правила перевода . Например, теперь мы требуем, чтобы в любой функции, которую мы преобразуем в отношение, каждое последнее cond линия начинается с #tвместо . Это делает Законы и Заповеди более единообразными и более легкими для усвоения. Кроме того, это простое изменение улучшает понимание недавно добавленного перевода и упрощает различение тех функций схемы, которые используют #t, от тех, что в главе о реализации, которые используют else.

Мы внесли много изменений в прозу книги.

...

Наконец, мы заменили неявную пунктуацию в квазиквотированных выражениях явной пунктуацией (обратный апостроф и запятая).

Так что есть много изменений по краям, это может помочь понять и обеспечить большую согласованность.

В любом случае, также взгляните на книгу Стерлинга и Шапиро « Искусство пролога» , март 1994 года, для сравнения. Теперь это даже открытый доступ: нажмите «Открыть доступ», и появится ссылка на PDF-файл.

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

Другие вопросы по тегам