![]() |
|
![]() ![]() ![]() |
|
brockel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 21.9.2006 Репутация: нет Всего: нет |
Писал без интерпритатора, как написал запустил в интерпретатор он начал ругаться всё что мог, я исправил, щас пишет: *** - RETURN-FROM: no block named NIL is currently visible Но я не понимаю что это значит. И если есть явные синтаксические ошибки - пишите, мне это нужно. У меня с синтаксисом лисп слабо. Использую clisp. |
|||
|
||||
adejneka |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 8.7.2005 Где: Москва, Россия Репутация: 9 Всего: 11 |
Замените RETURN в ИНФИКС на RETURN-FROM.
Не используйте SETQ. Если нужно вернуть значение из функции - просто верните его (заодно, это позволит использовать TRACE для отладки). Если нужна временная переменная - создайте ее с помощью LET:
В Common Lisp есть средства обработки исключений. Если возникает отказ, напишите (throw 'в-выражении) или (error "в выражении ~S встретилась неизвестная операция ~S" выражение операция). Поймать их можно с помощью CATCH или HANDLER-CASE. LOOP - это не сишный for(;;) {...}.
|
||||
|
|||||
brockel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 21.9.2006 Репутация: нет Всего: нет |
Хорошо, такой вопрос как хорошо склеивать списки, есть например:
(A B C D (F E) ) (L O L) Хочу получить: (A B C D (F E) L O L) Что то через Cons неполучается..... получается слишком много скобок при повторных вызовах Cons тоесть он создает - Список от списка от списка от списка.... |
|||
|
||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: нет Всего: 173 |
См. append.
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
brockel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 21.9.2006 Репутация: нет Всего: нет |
окей вроде почти наченает работать=))) Ещё вопрос (приведу код см. комментарии)
так вод setq помоему перестанавливает переменную локальную (действие) как это может быть, я непонимаю. Кто-нибудь обяснити в чем моя ошибка? |
|||
|
||||
adejneka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 8.7.2005 Где: Москва, Россия Репутация: 9 Всего: 11 |
ДЕЙСТВИЕ - это не локальная переменная, а необъявленная глобальная; 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 используется достаточно редко:
|
|||
|
||||
![]() ![]() ![]() |
Правила форума LISP | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | LISP | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |