Держите CL и Scheme прямо в голове - PullRequest
2 голосов
/ 28 августа 2008

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

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

Ответы [ 4 ]

5 голосов
/ 28 августа 2008

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

(map 'list #'function listvar)

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

2 голосов
/ 21 сентября 2008

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

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

0 голосов
/ 02 сентября 2008

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

Несмотря на всю практичность, у меня нет привычки писать код CL, что делает время, которое у меня есть, тем более болезненным.

0 голосов
/ 28 августа 2008

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

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

...