Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 8
1

Рекурсивный и итеррационный методы

13.04.2012, 02:14. Показов 1388. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!

Помогите с 2мя программами.
1)Разработать итерационный вариант программы в императивном стиле для решения предложенной задачи.
В теле функций можно использовать только примитивы car, cdr, cons. Все остальные функции должны быть определены через эти примитивы.

Объединять два упорядоченных числовых списка без нарушения порядка.
>(name ‘(2 4 7 9 13 16) ‘( 2 5 6 11 12))

2) Сделать нужно рекурсивным и итерационным методом

Сумму разных элементов списка. >(name ‘(1 2 3 1 2 3))


Только начался LISP ничего не понимаю по нему ,помогите если не трудно.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.04.2012, 02:14
Ответы с готовыми решениями:

Рекурсивный и итерационный методы.
Доброго времени суток. Есть 2 лабы, требующие решения! Помогите, пожалуйста! 1. Выдавать...

Рекурсивный и итеративный методы разворачивания числа
Не могу найти решение. В общем вводим целое число например '1234' , функция должна вернуть обратное...

Вычисление произведения выражения, используя итеративный и рекурсивный методы вычислений
Составить процедуру и функцию для вычисления произведения выражения, используя итеративный и...

4 методами сортировки: пузырька, шейкера, быстрая сортировка (нерекурсивный и рекурсивный методы)
Помогите отсортировать массив чисел по убыванию элементов 4 методами сортировки: пузырька,...

4
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,644
Записей в блоге: 13
13.04.2012, 11:23 2
Ну, без cond вряд-ли удастся обойтись...
Вот рекурсивное решение первой задачи:
Lisp
1
2
3
4
5
6
7
(defun merge (x y) (cond ((null x) y)
                         ((null y) x)
                         (t (cond ((> (car x) (car y)) (cons (car y) (merge x (cdr y)))) 
                                  (t (cons (car x) (merge (cdr x) y)))))))
(merge '(1 2 3 4) '(1 5 6 7))
 
==> (1 1 2 3 4 5 6 7)
А что значит "сумма разных"? Чему должен быть равна сумма разных для списка (1 2 3 1 2 3)?
1
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 8
13.04.2012, 14:06  [ТС] 3
А можно итерационное решение первой задачи , а во второй задачи нужно найти сумму разный чисел списка, ответ второй задачи 6.Помогите если не трудно
0
313 / 268 / 5
Регистрация: 03.04.2011
Сообщений: 456
13.04.2012, 14:25 4
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(defun sum-list-iter (list)
  (iter (for i on list)
        (unless (member (car i) (cdr i)) (summing (car i)))))
 
(defun sum-list (list)
  (if list
      (let ((head (car list))
            (tail (cdr list)))
        (if (member head tail)
            (sum-list tail)
            (+ head (sum-list tail))))
      0))
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,644
Записей в блоге: 13
13.04.2012, 14:58 5
Вот рекурсивное решение 2-й задачи:

Lisp
1
2
3
4
5
6
7
(defun usum (x) (cond ((null x) 0)
                      ((memb (car x) (cdr x)) (usum (cdr x)))
                      (t (+ (car x) (usum (cdr x))))))
 
(usum '(1 2 3 1 2 3 1 2 3))
 
==> 6
Добавлено через 12 минут
А вот итерационное решение второй:

Lisp
1
2
3
4
5
6
7
8
9
(defun isum (x &aux sum a lst)
  (setq sum 0)
  (dolist (a x sum) 
     (cond ((not (memb a lst)) (progn (setq sum (+ a sum))
                                      (setq lst (cons a lst)))))))
 
(isum '(1 2 3 1 2 3))
 
==> 6
Правда, пришлось привлечь, progn и dolist.

Добавлено через 20 минут
А вот кондовое итерационное решение первой задачи:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(defun imerge (x y) 
  (prog (cx cy res)
A   (cond ((null x) (return (append res y)))
          ((null y) (return (append res x))))
    (setq cx (car x))
    (setq cy (car y))
    (cond ((> cx cy) (prog nil (setq res (append res (list cy))) (setq y (cdr y))))
          ((> cy cx) (prog nil (setq res (append res (list cx))) (setq x (cdr x))))
          (t (prog nil (setq res (append res (list cx))) (setq x (cdr x))     
                       (setq res (append res (list cy))) (setq y (cdr y)))))
    (go A)
   )
)
 
(imerge '(1 2 3) '(1 7 8))
 
==> (1 1 2 3 7 8)
Здесь использована prog, go и append. Последняя достаточно легко выражается через cons, car и cdr.
1
13.04.2012, 14:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.04.2012, 14:58
Помогаю со студенческими работами здесь

Итеррационный цикл
Используя оператор цикла, вычислить значение (1-1/2^2)(1-1/3^2)...(1-1/n^2), если n>2.

Итеррационный циклический вычислительный процесс
Как записать эту задачу в Visual Studio C#???

Рекурсивный и не рекурсивный метод написания кода
Объясните пожалуйста, чем отличаются два таких метода. Желательно с примерами.

Методы приближенного дифференцирования + Методы сплайновой интерполяции функций v2.0
Народ нужна помощь, может для кого то банальные вопросы но для меня с моеи математикой все плохо....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru