Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Lisp
Перезагрузить страницу Удалить из многоуровневого списка все атомы-чисел
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
belai777 belai777 вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.05.2009
По умолчанию Удалить из многоуровневого списка все атомы-чисел - 06.05.2009, 22:03

пипец полный....

1. Обратить многоуровневый список, т.е последний в первый и.т.д
2. Удалить из многоуровневого списка все атомы-чисел
3. Возвести все атомы многоуровневого списка в квадрат
4. Найти среднеарифметическое атомов чисел в многоуровневом списке (((( пипец
5. Функция возвращает "true" если положительных чисел в многоуровневом списке больше чем отрицательных...

Буду заранее благодарна....если смогу то сама помогу кому нить)
Ответить с цитированием
  (#2 (permalink)) Старый
VH VH вне форума
Member
 
Сообщений: 781
Сказал(а) спасибо: 0
Поблагодарили 11 раз(а) в 10 сообщениях
Регистрация: 29.06.2006
По умолчанию 07.05.2009, 09:32

2. Удалить из многоуровневого списка все атомы-чис<strike>е</strike>ла
Код:
(defun F (L)
  (cond
   ((null L) nil)
   ((atom (car L))
    (if (numberp (car L))
     (F (cdr L))
     (cons (car L) (F (cdr L)))))
   (T (cons (F (car L)) (F (cdr L))))))
Код:
(defun F (L)
  (if L
   ((lambda (elem result)
     (if (atom elem)
      (if (numberp elem)
       result
       (cons elem result))
      (cons (F elem) result)))
    (car L)
    (F (cdr L)))))
3. Возвести все атомы<-числа> многоуровневого списка в квадрат
Код:
(defun F (L)
  (cond
   ((null L) nil)
   ((atom (car L))
    (cons
     (if (numberp (car L))
      (* (car L) (car L))
      (car L))
     (F (cdr L))))
   (T (cons (F (car L)) (F (cdr L))))))
Код:
(defun F (L)
  (if L
   ((lambda (elem result)
     (if (atom elem)
      (cons
       (if (numberp elem)
        (* elem elem)
        elem)
       result)
      (cons (F elem) result)))
    (car L)
    (F (cdr L)))))
Ответить с цитированием
  (#3 (permalink)) Старый
VH VH вне форума
Member
 
Сообщений: 781
Сказал(а) спасибо: 0
Поблагодарили 11 раз(а) в 10 сообщениях
Регистрация: 29.06.2006
По умолчанию 07.05.2009, 10:16

4. Найти среднеарифметическое атомов чисел в многоуровневом списке
Код:
(defun F (L &optional (flag nil) (sum 0) (count 0))
  (cond
   ((null L)
    (if flag
     (list sum count)
     (if (zerop count) 0
      (/ sum count))))
   ((atom (car L))
    (if (numberp (car L))
     (F (cdr L) flag (+ sum (car L)) (+ count 1))
     (F (cdr L) flag sum count)))
   (T
    (apply (function F)
     (cons
      (cdr L)
      (cons flag
       (mapcar '+
        (list sum count)
        (F (car L) T 0 0))))))))
Код:
(defun F (L &optional (flag nil) (sum 0) (count 0))
  (if L
   ((lambda (elem tail)
     (apply (function F)
      (cons tail
       (cons flag
        (mapcar '+
         (list sum count)
         (if (atom elem)
          (if (numberp elem)
           (list elem 1)
           (list 0 0))
          (F elem T 0 0)))))))
    (car L)
    (cdr L))
   (if flag
    (list sum count)
    (if (zerop count) 0
     (/ sum count)))))
Ответить с цитированием
  (#4 (permalink)) Старый
VH VH вне форума
Member
 
Сообщений: 781
Сказал(а) спасибо: 0
Поблагодарили 11 раз(а) в 10 сообщениях
Регистрация: 29.06.2006
По умолчанию 07.05.2009, 10:43

5. Функция возвращает "true" если положительных чисел в многоуровневом списке больше чем отрицательных
Аналогично 4:
Код:
(defun F (L &optional (flag nil) (pos 0) (neg 0))
  (if L
   ((lambda (elem tail)
     (apply (function F)
      (cons tail
       (cons flag
        (mapcar '+
         (list pos neg)
         (if (atom elem)
          (if (numberp elem)
           (cond
            ((minusp elem) (list 0 1))
            ((plusp elem) (list 1 0))
            (T (list 0 0)))
           (list 0 0))
          (F elem T 0 0)))))))
    (car L)
    (cdr L))
   (if flag
    (list pos neg)
    (> pos neg))))
Ответить с цитированием
  (#5 (permalink)) Старый
VH VH вне форума
Member
 
Сообщений: 781
Сказал(а) спасибо: 0
Поблагодарили 11 раз(а) в 10 сообщениях
Регистрация: 29.06.2006
По умолчанию 07.05.2009, 12:06

1. Обратить многоуровневый список
Хювёнен-Сеппянен "Мир Лиспа" т.1:
Код:
(defun REVERSION (L); в оригинале ОБРАЩЕНИЕ
  (cond
   ((atom L) L)
   ((null (cdr L)) (cons (REVERSION (car L)) nil))
   (T (append (REVERSION (cdr L)) (REVERSION (cons (car L) nil))))))
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
belai777 belai777 вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.05.2009
Wink 07.05.2009, 14:23

Ааа....я в шоке...спасибо большое....целюю в щечку! )))) Ты классный!
Ответить с цитированием
  (#7 (permalink)) Старый
belai777 belai777 вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.05.2009
Thumbs down 12.05.2009, 00:56

Цитата:
4. Найти среднеарифметическое атомов чисел в многоуровневом списке
Код:
(defun F (L &optional (flag nil) (sum 0) (count 0))
  (cond
   ((null L)
    (if flag
     (list sum count)
     (if (zerop count) 0
      (/ sum count))))
   ((atom (car L))
    (if (numberp (car L))
     (F (cdr L) flag (+ sum (car L)) (+ count 1))
     (F (cdr L) flag sum count)))
   (T
    (apply (function F)
     (cons
      (cdr L)
      (cons flag
       (mapcar '+
        (list sum count)
        (F (car L) T 0 0))))))))
Код:
(defun F (L &optional (flag nil) (sum 0) (count 0))
  (if L
   ((lambda (elem tail)
     (apply (function F)
      (cons tail
       (cons flag
        (mapcar '+
         (list sum count)
         (if (atom elem)
          (if (numberp elem)
           (list elem 1)
           (list 0 0))
          (F elem T 0 0)))))))
    (car L)
    (cdr L))
   (if flag
    (list sum count)
    (if (zerop count) 0
     (/ sum count)))))

(((( выдает какую то синтаксическую ошибку(((( ... и в 5 тоже ((( VH помоги пожалуйста...
Ответить с цитированием
  (#8 (permalink)) Старый
Alexey Dejneka Alexey Dejneka вне форума
Member
 
Сообщений: 451
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.11.2004
По умолчанию 12.05.2009, 07:14

1. Какой реализацией и какой версией Лиспа Вы пользуетесь?
2. Как точно выглядит сообщение об ошибке?
3. Прочитайте, пожалуйста, это http://www.chiark.greenend.org.uk/~s...m/bugs-ru.html.
Ответить с цитированием
  (#9 (permalink)) Старый
belai777 belai777 вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.05.2009
Thumbs down 12.05.2009, 22:13

Цитата:
1. Какой реализацией и какой версией Лиспа Вы пользуетесь?
2. Как точно выглядит сообщение об ошибке?
3. Прочитайте, пожалуйста, это http://www.chiark.greenend.org.uk/~s...m/bugs-ru.html.

Леш..я в автокаде запускаю....пишет при загрузке файла...сначала загружен удачно...а потом, синтаксическая ошибка(((
Ответить с цитированием
  (#10 (permalink)) Старый
VH VH вне форума
Member
 
Сообщений: 781
Сказал(а) спасибо: 0
Поблагодарили 11 раз(а) в 10 сообщениях
Регистрация: 29.06.2006
По умолчанию 13.05.2009, 00:47

В AutoLISP нет необязательных (&optional) формальных параметров.
Можно объявить все формальные параметры функции (F) обязательными:
Код:
(defun F (L flag sum count)
  (if L
   ((lambda (elem tail)
     (apply (function F)
      (cons tail
       (cons flag
        (mapcar '+
         (list sum count)
         (if (atom elem)
          (if (numberp elem)
           (list elem 1)
           (list 0 0))
          (F elem T 0 0)))))))
    (car L)
    (cdr L))
   (if flag
    (list sum count)
    (if (zerop count) 0
     (/ sum count)))))
И написать функцию-обертку (F_shell) с одним формальным параметром - списком, которая и будет вызывать функцию (F) с необходимыми значениями «бывших необязательных» формальных параметров:
Код:
(defun F_shell (L)
  (F L nil 0 0))
Номер 5 - аналогично вышепредставленному номеру 4 (обратите внимание: в связи с отсутствием в AutoLISP функции (plusp) порядок ветвей в <специальной>форме (cond) изменяется):
Код:
(defun F (L flag pos neg)
  (if L
   ((lambda (elem tail)
     (apply (function F)
      (cons tail
       (cons flag
        (mapcar '+
         (list pos neg)
         (if (atom elem)
          (if (numberp elem)
           (cond
            ((minusp elem) (list 0 1))
            ((zerop elem) (list 0 0))
            (T (list 1 0)))
           (list 0 0))
          (F elem T 0 0)))))))
    (car L)
    (cdr L))
   (if flag
    (list pos neg)
    (> pos neg))))
Код:
(defun F_shell (L)
  (F L nil 0 0))
Ответить с цитированием
  (#11 (permalink)) Старый
belai777 belai777 вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.05.2009
По умолчанию 14.05.2009, 15:09

Спасибо большое VH ... чмок тебя в щечку ))) ты хороший)
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно разобрать программу для перевода списка арабских чисел в список римских чисел. RuslanTM Prolog 2 18.12.2011 17:04
Удалить последние 3 элемента из списка flogiston Prolog 4 30.11.2011 18:41
Удалить элементы из списка Khelleos Prolog 2 27.04.2011 18:36
Удалить из списка все положительные элементы imported_Lisa_D Lisp 1 15.04.2009 12:20
Как удалить подсписок из списка Верочка Prolog 6 18.04.2008 00:06
Удалить из списка все атомы-числа из интервала STORM Lisp 9 11.05.2007 11:24
Удаление дублей для многоуровневого списка super_girl Lisp 4 24.04.2007 19:38
Суммирование списка чисел Aleksej_A Prolog 3 28.10.2005 15:15
Как удалить элемент с номером N из списка? March Prolog 1 10.01.2005 16:59
Как осуществить деление списка чисел gorky Prolog 9 28.11.2004 00:51
Как удалить часть списка wishmaster Prolog 5 18.10.2004 14:19



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов