Вопрос

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

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

Это было полезно?

Решение

Карта является более общим, чем mapcar, например, вы могли бы сделать следующее вместо использования mapcar:

(map 'list #'function listvar)

Как мне сохранить схему и CL отдельно в моей голове?Я думаю, когда вы достаточно хорошо знаете оба языка, вы просто знаете, что работает на одном, а что нет на другом.Несмотря на синтаксическое сходство, это совершенно разные языки с точки зрения стиля.

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

Что ж, я думаю, что как только вы приобретете достаточный опыт владения обоими языками, это отпадет само собой (просто со схожими естественными языками, такими как итальянский и испанский).Если вы обычно программируете на одном языке и переключаетесь на другой лишь изредка, то, к сожалению, вы обречены писать Common Lisp на Scheme или наоборот ;)

Одна вещь, которая помогает, - это иметь отдельную визуальную среду для обоих языков, используя подсветку синтаксиса некоторыми другими цветами и т.д.Тогда, по крайней мере, вы всегда будете знать, находитесь ли вы в режиме Common Lisp или Scheme.

Я определенно осознаю, что существуют синтаксические различия, хотя я, конечно, еще недостаточно свободно владею ими, чтобы автоматически использовать их, что делает код в настоящее время намного более похожим ;-).

И у меня было предчувствие, что ваш ответ будет именно таким, но я всегда могу надеяться на короткий путь <_<.

Самый простой способ сохранить понятность обоих языков - это мыслить и писать код на Common Lisp.Код Common Lisp может быть относительно легко преобразован в код Scheme;однако переход от Scheme к Common Lisp может вызвать несколько головных болей.Я помню, как однажды я использовал letrec в схеме для хранения как переменных, так и функций, и мне пришлось разделить его на отдельные функции CL для пространств имен переменных и функций соответственно.

Однако, при всей практичности, у меня нет привычки писать CL-код, что делает время, когда мне приходится это делать, еще более болезненным.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top