> 1 <

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

MasterJedi

Members


Статус

3 сообщений

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

#4251   2011-05-09 01:46 GMT+3 часа(ов)      
Необходимо создать функцию, удваивающую значения элементов списка. Единственным аргументом функции будет список))
Идея, как понимаю такова:

брать, что возвращает (CAR <данный_список>) и умножать на 2. Рекурсивно вызывать данную функцию с аргументом CDR <данный_список>.

Проблема возникает, как описать условие выхода из рекурсии?

На прологе у меня это выглядело так:
 
udv([H|T],[X|Y]) :- X = 2*T, p(T,Y).
udv([],[]).

отредактировал(а) MasterJedi: 2011-05-09 20:01 GMT+3 часа(ов)

megamanx

Members


Статус

307 сообщений

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

#4252   2011-05-09 15:12 GMT+3 часа(ов)      
if (null L) nil
а вообще, если задача не ставилась решать рекурсивно, то проще через отображение: mapcar #'(lambda(x)(* x 2)) L
I wish I'd made you angry earlier

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#4253   2011-05-09 16:53 GMT+3 часа(ов)      
> if (null L) nil
В лиспе отсутствует булев тип, поэтому проверка на nil является лишней.

MasterJedi

Members


Статус

3 сообщений

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

#4255   2011-05-09 20:05 GMT+3 часа(ов)      
Цитата
misha :
> if (null L) nil
В лиспе отсутствует булев тип, поэтому проверка на nil является лишней.



Спасибо, буду разбираться с mapcar.
К сожалению, "if" вряд ли дадут использовать, поэтому только остается только cond, для проверки условия.

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#4259   2011-05-10 03:09 GMT+3 часа(ов)      
(defmacro myif (test then else)
`(cond
(,test ,then)
(T ,else)))
> 1 <


Онлайн :

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