Ответ 1
Если в разделе "Стандартная схема (в Racket IDE)" вы имеете в виду язык Racket, то есть, что вы получаете, когда вы префикс кода #lang racket,
, тогда четыре лучших отличия, которые нужно обратить внимание:
- другая система модулей
- другая макросистема (в зависимости от того, сколько лет ваш код)
- неизменяемые cons-cells (если вы не импортируете изменчивые)
- no-one-arm ifs in Racket (используйте
when
)
В код порта от Guile to Racket найдите, какие файлы находятся в нижней части ваших зависимостей, то есть найдите файлы, которые не зависят от других файлов. Откройте такой файл в Racket, добавьте строку #lang racket вверху и попробуйте запустить его.
Скорее всего, вы столкнетесь с некоторыми ошибками "несвязанного идентификатора". Если вам повезет, функция присутствует в Racket, но не включена в язык "ракетки". Найдите имя в документации Racket, и если вы его найдете, используйте (require...) для импорта имени в вашу программу.
Затем запустите программу еще раз, чтобы найти следующую ошибку.
Некоторые функции называются по-разному в Guile и Racket, поэтому найдите имя в документации Guile и посмотрите, что он делает. Затем откройте документацию Ракетки по тому же вопросу и посмотрите, что она вызывается в Racket.
В некоторых случаях вам, возможно, придется внести большие изменения. Если вы не можете найти какую-либо функциональность в документации Racket, попробуйте запросить список рассылки. Может быть, у него просто другое имя или что кто-то его реализовал и положил на PLaneT (таким образом, он не появится в документацию, пока вы не установили пакет).
Пример импорта srfi/1 в язык R5RS.
#lang r5rs
(#%require srfi/1)
(xcons 1 2)
Отличия от кода R4RS до современной схемы?
Одна вещь, которую нужно обратить внимание, заключается в том, что в R4RS пустой список '() считается ложным, а не интерпретируется как истинный.
Посмотрите на этот вопрос, чтобы узнать больше:
Запуск кода замены на основе правил SICP, основанного на правилах
См. также этот список изменений из стандарта R5RS: Список изменений от R4RS до R5RS