> 1 <

Автор Сообщение

Познающий

Members


Статус

17 сообщений

Где: ---
Род занятий:
Возраст:

#1522   2010-02-25 16:33 GMT+3 часа(ов)      
доброго времени суток!
Осваиваю Лисп =)
При написании первой лабы столкнулся с такой трудностью:
;; Error: Argument 3 given to RPLACA or RPLACD should have been a cons in MUS

Если нужно - вот исходник.
(setq rdiag '(3 () 4 b f () f g 5 ff 4))

(defun mus(x)
(cond
( (null x) (mus(cdr x) 0) )
( (listp (car x)) (cons(mus(car x)) (mus(cdr x))))
( (numberp (car x)) (cons(mus(car x)) (mus(cdr x))))
( (symbolp (car x)) (cons(mus(car x)) (mus(cdr x))))
( t 0)
)
)
(mus rdiag)


Что значит эта ошибка? что не нравится интерпретатору в моём рдиане (или где?)?

PS да, с рекурсией я очень запутался.

asbest

Members


Статус

62 сообщений

Где: Russia
Род занятий:
Возраст:

#1523   2010-02-25 17:09 GMT+3 часа(ов)      
На правах рекламы...

YLisp / Version 3.6 / Common LISP & CLOS compliant
1991-93 Dmitry Ivanov ( MAI )
Windows port 2003 - 2010 by Arseny Slobodyuk ( FEBRAS )

>(ed "zzz")
Загрузить файл ZZZ.LSP?
Ошибка: Некорректный аргумент 3
Ошибка обнаружена функцией CAR.
break>
e (CAR X)
l |arg1| = 3
debug>
e (LISTP (CAR X))
debug>
e (COND ((NULL X) (MUS (CDR X) 0)) ((LISTP (CAR X)) (CONS (MUS (CAR X)) (MUS (CDR X)))) ((NUMBERP
(CAR X))

(CONS (MUS (CAR X))
(MUS (CDR X)))) ((SYMBOLP (CAR X)) (CONS (MUS (CAR X)) (MUS (CDR X)))) (T 0))
debug>


Понятнее? Число 3 - не есть список, формы после break>, debug> - место обнаружения ошибки.

Познающий

Members


Статус

17 сообщений

Где: ---
Род занятий:
Возраст:

#1525   2010-02-25 17:38 GMT+3 часа(ов)      
что-то мелькнуло: я понял, что в симбол и намбе надо ставить не кар х а просто х?
Самое забавное, что когда компилирую без вызова функции - все вроде ничего.

misha

Members


Статус

465 сообщений

Где: Yemen
Род занятий:
Возраст:

#1526   2010-02-25 21:03 GMT+3 часа(ов)      
Цитата
Познающий :
Самое забавное, что когда компилирую без вызова функции - все вроде ничего.

С точки зрения лиспа ваш код не содержит синтаксических ошибок.

asbest

Members


Статус

62 сообщений

Где: Russia
Род занятий:
Возраст:

#1528   2010-02-26 05:42 GMT+3 часа(ов)      
Цитата
( (numberp (car x)) (cons(mus(car x)) (mus(cdr x))))


(car x) - число, передающееся дальше в mus, но она не умеет обрабатывать числа, т.к. пытается взять у аргумента car.

Первое условие в cond еще более странно. Зачем вытаскивать cdr из nil? Он всегда nil.
> 1 <


Онлайн :

0 пользователь(ей), 23 гость(ей) :