В чем разница между первым и вторым изданиями 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-файл.
(А если вы любите приключения, вы можете перейти на следующий уровень: программирование набора ответов ).