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

1 Описать фнкции, моделирующие следующие логические операции
A + в кружочке B, A стрелочка B, A&B

2 Для списка произвольного уровня вложености, состоящего из букв, цифр и строк вычислить число обьектов каждого вида и их процентое соотношение. Сам список превратить в список из обьектов, в котором нет повторов
Ответить с цитированием
  (#2 (permalink)) Старый
Индусский код Индусский код вне форума
Member
 
Аватар для Индусский код
 
Сообщений: 108
Сказал(а) спасибо: 2
Поблагодарили 29 раз(а) в 29 сообщениях
Регистрация: 27.11.2011
Адрес: Планетка Земля)
По умолчанию 29.01.2012, 19:13

Цитата:
Сообщение от MAKCYTA Посмотреть сообщение
Сам список превратить в список из обьектов, в котором нет повторов
а структура должна быть сохранена?


Совместное действие большого числа случайных факторов приводит к результату, почти не зависящему от случая
Ответить с цитированием
  (#3 (permalink)) Старый
Индусский код Индусский код вне форума
Member
 
Аватар для Индусский код
 
Сообщений: 108
Сказал(а) спасибо: 2
Поблагодарили 29 раз(а) в 29 сообщениях
Регистрация: 27.11.2011
Адрес: Планетка Земля)
По умолчанию 29.01.2012, 19:42

ну если нет, тогда так можно
lisp Код:
CL-USER> (defun f (l)
           (labels ((flatten (l)
                      (if (null l) ()
                          (if (consp (car l))
                              (nconc (flatten (car l))
                                     (flatten (cdr l)))
                              (cons (car l)
                                    (flatten (cdr l))))))
                    (count-pred (fun l)
                      (if (null l) (+)
                          (if (funcall fun (car l))
                              (1+ (count-pred fun (cdr l)))
                              (count-pred fun (cdr l))))))
             (let* ((lst (flatten l))
                    (num (count-pred #'numberp lst))
                    (nonum (count-pred #'symbolp lst))
                    (string (count-pred #'stringp lst))
                    (sum (+ num nonum string)))
               (list (format () "Кол-во чисел - ~a (~a%), символов - ~a (~a%), строк - ~a (~a%)"
                             num (float (/ (* num 100) sum))
                             nonum (float (/ (* nonum 100) sum))
                             string (float (/ (* string 100) sum)))
                     (remove-duplicates lst)))))

CL-USER> (f '(a s (3 4 "mix" s) (d f "nix" (4 4 (777) "paradise")) 17 ((((("hell" and 666)))))))
("Кол-во чисел - 7 (41.17647%), символов - 6 (35.294117%), строк - 4 (23.529411%)"
 (A 3 "mix" S D F "nix" 4 777 "paradise" 17 "hell" AND 666))


Совместное действие большого числа случайных факторов приводит к результату, почти не зависящему от случая
Ответить с цитированием
  (#4 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 525
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 29.01.2012, 20:33

как вариант:
lisp Код:
(defun cns (w &optional ac (m 0) (c 0) (n 0) (s 0) &aux (a (car w)) (d (cdr w)))
  (cond ((null w) (values ac (format nil "chrs ~a ~a%, nums ~a ~a%, strs ~a ~a%" c (cnt c m) n (cnt n m) s (cnt s m))))
        ((numberp a) (if (member a d) (cns d ac (1+ m) c (1+ n) c) (cns d (push a ac) (1+ m) c (1+ n) s)))
        ((stringp a) (if (member a d :test #'equal) (cns d ac (1+ m) c n (1+ s)) (cns d (push a ac) (1+ m) c n (1+ s))))
        (t (if (member a d) (cns d ac (1+ m) (1+ c) n s) (cns d (push a ac) (1+ m) (1+ c) n s)))))

(defun cnt (a m)
  (floor (float (/ (* a 100) m))))

(defun flat (w &optional acc)
  (cond ((null w) acc)
        ((atom w) (cons w acc))
        ((flat (car w) (flat (cdr w) acc)))))

(defun decompose (w)
  (cns (flat w)))

> (decompose '(1 (#\a) ("b" (1)) "b" (1)))
(1 "b" #\a)
"chrs 1 16%, nums 3 50%, strs 2 33%"
Ответить с цитированием
  (#5 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 525
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 29.01.2012, 20:44

to Индусский код:

> (count-if #'symbolp '(a))
1
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Индусский код Индусский код вне форума
Member
 
Аватар для Индусский код
 
Сообщений: 108
Сказал(а) спасибо: 2
Поблагодарили 29 раз(а) в 29 сообщениях
Регистрация: 27.11.2011
Адрес: Планетка Земля)
По умолчанию 29.01.2012, 21:08

ха) а я и забыл)


Совместное действие большого числа случайных факторов приводит к результату, почти не зависящему от случая
Ответить с цитированием
  (#7 (permalink)) Старый
Индусский код Индусский код вне форума
Member
 
Аватар для Индусский код
 
Сообщений: 108
Сказал(а) спасибо: 2
Поблагодарили 29 раз(а) в 29 сообщениях
Регистрация: 27.11.2011
Адрес: Планетка Земля)
По умолчанию 29.01.2012, 21:11

вот такую считалку накатал
lisp Код:
CL-USER> (defun f (l &optional (a 0) (b 0) (c 0))
           (cond ((null l) (list a b c))
                 ((consp (car l)) (map 'list #'+ (f (car l) 0 0 0) (f (cdr l) a b c)))
                 ((symbolp (car l)) (f (cdr l) (1+ a) b c))
                 ((numberp (car l)) (f (cdr l) a (1+ b) c))
                 ((f (cdr l) a b (1+ c)))))
CL-USER> (f '(A S D (E 4 R "mix") (Q W) ("string" M) 2 I M M 2 2 P))
(12 4 2)


Совместное действие большого числа случайных факторов приводит к результату, почти не зависящему от случая

Последний раз редактировалось Индусский код; 29.01.2012 в 21:23
Ответить с цитированием
  (#8 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 525
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 29.01.2012, 21:57

lisp Код:
(defun cnt (a m)
  (floor (float (/ (* a 100) m))))

(defun flat (w &optional acc)
  (cond ((null w) acc)
        ((atom w) (cons w acc))
        ((flat (car w) (flat (cdr w) acc)))))

(defun decompose (w &aux (a (count-if #'symbolp (flat w))) (b (count-if #'numberp (flat w))) (c (count-if #'stringp (flat w))) (m (+ a b c)))
  (values (remove-duplicates (flat w)) (format nil "smbs ~a ~a%, nums ~a ~a%, strs ~a ~a%" a (cnt a m) b (cnt b m) c (cnt c m))))

> (decompose '(A S D (E 4 R "mix") (Q W) ("string" M) 2 I M M 2 2 P))
(A S D E 4 R "mix" Q W "string" I M 2 P)
"smbs 12 66%, nums 4 22%, strs 2 11%"
Ответить с цитированием
  (#9 (permalink)) Старый
Индусский код Индусский код вне форума
Member
 
Аватар для Индусский код
 
Сообщений: 108
Сказал(а) спасибо: 2
Поблагодарили 29 раз(а) в 29 сообщениях
Регистрация: 27.11.2011
Адрес: Планетка Земля)
По умолчанию 29.01.2012, 22:16

lisp Код:
(defun fun (l)
           (labels ((f (l a b c)
                      (cond ((null l) (list a b c))
                        ((consp (car l)) (map 'list #'+ (f (car l) 0 0 0) (f (cdr l) a b c)))
                        ((symbolp (car l)) (f (cdr l) (1+ a) b c))
                        ((numberp (car l)) (f (cdr l) a (1+ b) c))
                        ((f (cdr l) a b (1+ c)))))
                (flatten (l res)
                  (cond ((null l) res)
                        ((atom l) (cons l res))
                        ((flatten (car l) (flatten (cdr l) res))))))
             (let ((res (f l 0 0 0)) (sum (reduce #'+ (f l 0 0 0))))
               (flet ((% (s) (float (/ (* 100 (funcall s res)) sum))))
                   (format () "symbol ~a (~a%) num ~a (~a%) str ~a (~a%)"
                           (first res) (% #'car) (second res)
                           (% #'second) (third res) (% #'third))))))


Совместное действие большого числа случайных факторов приводит к результату, почти не зависящему от случая

Последний раз редактировалось Индусский код; 29.01.2012 в 22:40
Ответить с цитированием
  (#10 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 525
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 29.01.2012, 22:56

lisp Код:
(defun flat (w &optional acc)
  (cond ((null w) acc)
        ((atom w) (cons w acc))
        ((flat (car w) (flat (cdr w) acc)))))

(defun pose (w &aux
             (a (count-if #'symbolp w))
             (b (count-if #'numberp w))
             (c (count-if #'stringp w))
             (m (+ a b c)))
  (values (remove-duplicates w)
          (format nil "smbs ~a ~a%, nums ~a ~a%, strs ~a ~a%"
                  a (cnt a m)
                  b (cnt b m)
                  c (cnt c m))))

(defun decompose (w)
  (pose (flat w)))

> (decompose '(A S D (E 4 R "mix") (Q W) ("string" M) 2 I M M 2 2 P))
(A S D E 4 R "mix" Q W "string" I M 2 P)
"smbs 12 66%, nums 4 22%, strs 2 11%"
Ответить с цитированием
  (#11 (permalink)) Старый
Индусский код Индусский код вне форума
Member
 
Аватар для Индусский код
 
Сообщений: 108
Сказал(а) спасибо: 2
Поблагодарили 29 раз(а) в 29 сообщениях
Регистрация: 27.11.2011
Адрес: Планетка Земля)
По умолчанию 29.01.2012, 23:41

от ты не угомонный)


Совместное действие большого числа случайных факторов приводит к результату, почти не зависящему от случая
Ответить с цитированием
  (#12 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 525
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 19.11.2014, 11:59

как вариант:
lisp Код:
(defun cnt (a m)
  (floor (float (/ (* a 100) m))))

(defun flat (w)
  (loop for a in w
        if (and a (atom a)) collect a
        else nconc (flat a)))

(defun pose (w &aux
             (a (count-if #'symbolp w))
             (b (count-if #'numberp w))
             (c (count-if #'stringp w))
             (m (+ a b c)))
  (values (remove-duplicates w)
          (format nil "smbs ~a ~a%, nums ~a ~a%, strs ~a ~a%"
                  a (cnt a m)
                  b (cnt b m)
                  c (cnt c m))))

(defun decompose (w)
  (pose (flat w)))

> (decompose '(A S D (E 4 R "mix") (Q W) ("string" M) 2 I M M 2 2 P))
(A S D E 4 R "mix" Q W "string" I M 2 P)
"smbs 12 66%, nums 4 22%, strs 2 11%"
Ответить с цитированием
Ads
Ответ

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите решить задачу по ооп JuSa C++ Builder 0 09.09.2014 18:54
помогите решить задачу Dunlop Prolog 14 19.06.2012 17:40
Помогите решить задачу! SeDoV[Y] Prolog 1 29.12.2011 01:24
помогите решить задачу TimoLLIa Pascal 1 11.10.2011 17:51
Помогите решить задачу!!!! Sasha_16 Prolog 0 27.05.2011 19:12
Помогите решить задачу Legik Prolog 7 30.12.2009 19:04
ПОМОГИТЕ РЕШИТЬ ЗАДАЧУ! imported_poSt Prolog 5 21.10.2009 14:18
Помогите решить задачу Dimon278 Pascal 2 19.10.2009 11:38
SOS помогите решить задачу TDG Pascal 1 19.09.2009 15:27
Помогите решить задачу Гринч Pascal 8 17.03.2009 23:09
Помогите решить задачу HaZe Pascal 1 14.10.2008 22:18
Помогите решить задачу на С++ <SpEctAtOr> Вопросы начинающих программистов 0 09.03.2004 22:10



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