| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > LISP > Синтаксические ошибки |
| Автор: brockel 15.11.2006, 23:27 | ||
Писал без интерпритатора, как написал запустил в интерпретатор он начал ругаться всё что мог, я исправил, щас пишет: *** - RETURN-FROM: no block named NIL is currently visible Но я не понимаю что это значит. И если есть явные синтаксические ошибки - пишите, мне это нужно. У меня с синтаксисом лисп слабо. Использую clisp. |
| Автор: adejneka 16.11.2006, 06:56 | ||||
| Замените RETURN в ИНФИКС на RETURN-FROM. Не используйте SETQ. Если нужно вернуть значение из функции - просто верните его (заодно, это позволит использовать TRACE для отладки). Если нужна временная переменная - создайте ее с помощью LET:
В Common Lisp есть средства обработки исключений. Если возникает отказ, напишите (throw 'в-выражении) или (error "в выражении ~S встретилась неизвестная операция ~S" выражение операция). Поймать их можно с помощью CATCH или HANDLER-CASE. LOOP - это не сишный for(;;) {...}.
|
| Автор: brockel 17.11.2006, 00:13 |
| Хорошо, такой вопрос как хорошо склеивать списки, есть например: (A B C D (F E) ) (L O L) Хочу получить: (A B C D (F E) L O L) Что то через Cons неполучается..... получается слишком много скобок при повторных вызовах Cons тоесть он создает - Список от списка от списка от списка.... |
| Автор: Void 17.11.2006, 00:20 |
| См. append. |
| Автор: brockel 17.11.2006, 11:03 | ||
окей вроде почти наченает работать=))) Ещё вопрос (приведу код см. комментарии)
так вод setq помоему перестанавливает переменную локальную (действие) как это может быть, я непонимаю. Кто-нибудь обяснити в чем моя ошибка? |
| Автор: adejneka 17.11.2006, 21:04 | ||
| ДЕЙСТВИЕ - это не локальная переменная, а необъявленная глобальная; SETQ ее, естественно, переустанавливает. Для того, чтобы переменная стала локальной, ее нужно создать как локальную - например, используя LET. Сравните с языком C: (setq x 1) ... (f x) <=> { x=1; ... f(x)... } ; глобальная (let ((x 1)) ... (f x) ... ) <=> { int x=1; ... f(x); ... } ; локальная Еще один момент: оператор COND имеет и ветку "иначе"; реально оператор RETURN-FROM используется достаточно редко:
|