Держите CL и Scheme прямо в голове

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

Итак, советы о том, как свести к минимуму выбор того или другого и придерживаться его?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
503
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

карта является более общим, чем 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.

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