В зависимости от моего настроения я, кажется, колеблюсь между желанием Lisp-1 и Lisp-2. К сожалению, помимо очевидных различий в пространстве имен, это оставляет множество забавных проблем с именами функций и т. д., С которыми вы сталкиваетесь. Показательный пример: сегодня вечером я пытался написать какой-то код (map # 'function listvar), который, конечно, вообще не работает в CL. Мне потребовалось немного времени, чтобы вспомнить, что я хотел mapcar, а не map. Конечно, это не помогает, когда slime / emacs показывает, что карта IS определена как нечто, хотя, очевидно, это совсем не та же функция.
Итак, советы о том, как свести к минимуму выбор того или другого и придерживаться его?





карта является более общим, чем mapcar, например, вместо использования mapcar вы можете сделать следующее:
(map 'list #'function listvar)
Как мне держать схему и CL отдельно в моей голове? Думаю, когда вы достаточно хорошо знаете оба языка, вы просто знаете, что работает на одном, а что нет на другом. Несмотря на синтаксическое сходство, они представляют собой совершенно разные языки с точки зрения стиля.
Я определенно знаю, что есть синтаксические различия, хотя я, конечно, еще недостаточно бегло, чтобы автоматически использовать их, что делает код намного более похожим в настоящее время ;-)
And I had a feeling your answer would be the case, but can always hope for a shortcut <_>
Самый простой способ сохранить правильность обоих языков - это думать и писать код на Common Lisp. Код Common Lisp может быть относительно легко преобразован в код Scheme; однако переход от Scheme к Common Lisp может вызвать некоторые головные боли. Я помню, как однажды я использовал letrec в Scheme для хранения переменных и функций, и мне пришлось разделить его на отдельные функции CL для пространств имен переменных и функций соответственно.
На практике же я не имею привычки писать код CL, что делает то время, которое мне действительно приходится, еще более болезненным.
Что ж, я думаю, что как только вы наберетесь достаточного опыта в обоих языках, это перестанет быть проблемой (только с похожими естественными языками, такими как итальянский и испанский). Если вы обычно программируете на одном языке и переключаетесь на другой лишь изредка, то, к сожалению, вы обречены писать Common Lisp на Scheme или наоборот;)
Одна вещь, которая помогает, - это иметь отличную визуальную среду для обоих языков, используя подсветку синтаксиса некоторыми другими цветами и т. д. Тогда, по крайней мере, вы всегда будете знать, находитесь ли вы в режиме Common Lisp или Scheme.