Форум программистов, компьютерный форум, киберфорум
Языки JVM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 31.01.2013
Сообщений: 48

Clojure Дать описание фрагмента программы, в котором определяется количество нечетных, отрицательных четных и прочих элементов

28.04.2014, 16:07. Показов 1282. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Помогите пожалуйста решить задачу:

Дан список целых чисел. Требуется дать описание фрагмента программы, в котором определяется количество нечетных элементов, количество отрицательных четных и количество прочих элементов списка.

Очень прошу также помочь с хорошей литературой по теории и программированию ЛИСП, сам совсем новичок и понять тяжело по той литературе, что нам дали.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.04.2014, 16:07
Ответы с готовыми решениями:

Дать описание фрагмента программы, обеспечивающей вывод и ввод элементов матрицы А(к,к) по строкам
дать описание фрагмента программы, обеспечивающей вывод и ввод элементов матрицы А(к,к) по строкам. Данные вводятся с клавиатуры.

В целочисленном массиве подсчитать количество четных положительных, четных отрицательных, нечетных положительных и нечетных отрицательных
в целочисленном массиве подсчитать количество четных положительных, четных отрицательных, нечетных положительных и нечетных отрицательных....

Найти произведение отрицательных четных и положительных нечетных элементов матрицы
Двумерный массив: Найти произведение отрицательных четных и положительных нечетных элементов двумерного массива.

10
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,705
Записей в блоге: 14
28.04.2014, 17:13
Способ 1. Функциональный:

Lisp
1
2
3
4
5
6
7
8
9
10
11
(defun task (lst)
  (let* ((num-odd (length (remove-if-not #'oddp lst)))
         (num-neg-even (length (remove-if-not #'(lambda (x) (and (minusp x) (evenp x))) lst)))
         (num-other (- (length lst) num-odd num-neg-even)))
    (list num-odd num-neg-even num-other)))
 
==> task
 
(task '(1 2 3 -1 -2 -3))
 
==> (4 1 1)
Добавлено через 4 минуты
Способ 2. Рекурсия:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(defun task (lst &optional (num-odd 0) (num-neg-even 0) (num-other 0))
  (cond ((null lst) (list num-odd num-neg-even num-other))
        ((oddp (car lst)) (task (cdr lst) (+ 1 num-odd) num-neg-even num-other))
        ((and (evenp (car lst)) (minusp (car lst))) (task (cdr lst) num-odd (+ 1 num-neg-even) num-other))
        (t (task (cdr lst) num-odd num-neg-even (+ 1 num-other)))))
 
 
==> task
 
(task '(1 2 3 -1 -2 -3))
 
==> (4 1 1)
Добавлено через 4 минуты
Способ 3. Цикл

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(defun task (lst)
  (let ((num-odd 0)
        (num-neg-even 0)
        (num-other 0))
    (dolist (i lst (list num-odd num-neg-even num-other))
        (cond ((oddp i) (setq num-odd (+ 1 num-odd)))
              ((and (evenp i) (minusp i)) (setq num-neg-even (+ 1 num-neg-even)))
              (t (setq num-other (+ 1 num-other))))))) 
 
==> task
 
(task '(1 2 3 -1 -2 -3))
 
==> (4 1 1)
2
1075 / 968 / 113
Регистрация: 04.11.2012
Сообщений: 1,013
28.04.2014, 17:33
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
(defun Score (ls)
  (defstruct score (odd 0) (neg-even 0) (other 0))
  (let ((ins (make-score)))
    (dolist (i ls)
      (cond
        ((oddp i)
         (setf (score-odd ins)
               (1+ (score-odd ins))))
        ((and (evenp i) (minusp i))
         (setf (score-neg-even ins)
               (1+ (score-neg-even ins))))
        (t (setf (score-other ins)
                 (1+ (score-other ins))))))
    (format t "ODD: ~12D~%NEGATIVE-EVEN: ~2D~%OTHER: ~10D~%"
      (score-odd ins) (score-neg-even ins) (score-other ins))))
 
> (Score '(11 -63 51 -32 98 -6 44 -59 55 -67 18 -24 0 -85 29 -20 36 -62 22 -41))
ODD:            9
NEGATIVE-EVEN:  5
OTHER:          6
1
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
30.04.2014, 03:27
Цитата Сообщение от nVerner Посмотреть сообщение
Очень прошу также помочь с хорошей литературой по теории и программированию ЛИСП, сам совсем новичок и понять тяжело по той литературе, что нам дали.
Читайте годные английские (ну то есть американские, ну вы поняли) книжки - ANSI Common Lisp (можно нагуглить нелегальную копию), Practical Common Lisp (перевод на лисперру) и кодьте побольше.
1
 Аватар для _sg
4708 / 4403 / 380
Регистрация: 12.05.2012
Сообщений: 3,101
30.04.2014, 08:25
варианты:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(defun count-all (w)
  (values (count-if #'oddp w)
          (count-if #'(lambda (a) (and (minusp a) (evenp a))) w)
          (count-if-not #'(lambda (a)
                            (or (oddp a)
                                (and (minusp a) (evenp a))))
                        w)))
 
> (count-all '(1 2 3 -1 -2 -3))
4
1
1
> (count-all '(11 -63 51 -32 98 -6 44 -59 55 -67 18 -24 0 -85 29 -20 36 -62 22 -41))
9
5
6
Добавлено через 2 минуты
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(defun count-all (w &aux
                  (a (count-if #'oddp w))
                  (b (count-if #'(lambda (a)
                                   (and (minusp a)
                                        (evenp a)))
                               w)))
  (values a b (- (length w) a b)))
 
> (count-all '(1 2 3 -1 -2 -3))
4
1
1
> (count-all '(11 -63 51 -32 98 -6 44 -59 55 -67 18 -24 0 -85 29 -20 36 -62 22 -41))
9
5
6
Добавлено через 2 минуты
Цитата Сообщение от nVerner Посмотреть сообщение
помочь с ... литературой
памятка по решению задач
1
 Аватар для smoke853
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
30.04.2014, 08:58
Clojure:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(defn task [coll]
  (map count ((juxt (partial filter odd?)
                    (partial filter (every-pred even? neg?))
                    (partial remove (some-fn odd? neg?)))
              coll)))
;; => #'user/task
 
(task '(1 2 3 0 -1 -2 -3))
;; => (4 1 2)
 
(task '(11 -63 51 -32 98 -6 44 -59 55 -67 18 -24 0 -85 29 -20 36 -62 22 -41))
;; => (9 5 6)
1
 Аватар для _sg
4708 / 4403 / 380
Регистрация: 12.05.2012
Сообщений: 3,101
30.04.2014, 09:10
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
(defun count-all (w)
  (loop for a in w
        if (oddp a)
        collect a into odds
        else
        if (and (minusp a) (evenp a))
        collect a into mevens
        else collect a into ramp
        finally (return (values (length odds)
                                (length mevens)
                                (length ramp)
                                odds
                                mevens
                                ramp))))
 
> (count-all '(1 2 3 -1 -2 -3))
4
1
1
(1 3 -1 -3)
(-2)
(2)
> (count-all '(11 -63 51 -32 98 -6 44 -59 55 -67 18 -24 0 -85 29 -20 36 -62 22 -41))
9
5
6
(11 -63 51 -59 55 -67 -85 29 -41)
(-32 -6 -24 -20 -62)
(98 44 18 0 36 22)
2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,705
Записей в блоге: 14
30.04.2014, 09:19
Цитата Сообщение от helter Посмотреть сообщение
Читайте годные английские (ну то есть американские, ну вы поняли) книжки - ANSI Common Lisp (можно нагуглить нелегальную копию), Practical Common Lisp (перевод на лисперру) и кодьте побольше.
- лучшие книги уже переведены на русский. Например П. Грэм "ANSI Common Lisp" или "Структура и интерпретация компьютерных программ" (там, правда основой является Схема а не Лисп). Есть и масса пособий для студентов на русском (см., например, сайт Интуит.ру).

А учить незнакомый язык (Лисп) на незнакомом (или слабо знакомом) английском - не лучшее решение...

Кодить побольше - да, совет правильный.
1
 Аватар для _sg
4708 / 4403 / 380
Регистрация: 12.05.2012
Сообщений: 3,101
30.04.2014, 09:38
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
(defun count-all (w &optional o me r &aux (a (car w)) (d (cdr w)))
  (cond ((null w) (values (length o) (length me) (length r) o me r))
        ((oddp a) (count-all d (cons a o) me r))
        ((and (minusp a) (evenp a)) (count-all d o (cons a me) r))
        (t (count-all d o me (cons a r)))))
 
> (count-all '(11 -63 51 -32 -6 44 -59 55 -67 -24 0 -85 29))
8
3
2
(29 -85 -67 55 -59 51 -63 11)
(-24 -6 -32)
(0 44)
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,705
Записей в блоге: 14
30.04.2014, 10:05
И еще вариант (iter):

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(defun task (lst)
  (let ((odd 0) (even-neg 0) (other 0))
    (iter (for i in lst) (if (oddp i) (counting i into odd) 
                             (if (and (minusp i) (evenp i)) (counting i into even-neg)
                                 (counting i into other))))
    (list odd even-neg other))) 
 
==> task
 
(task '(1 2 3 -1 -2 -3))
 
==> (4 1 1)
Добавлено через 3 минуты
Цитата Сообщение от nVerner Посмотреть сообщение
тяжело по той литературе, что нам дали.
- кстати, а ЧТО вам дали?
1
 Аватар для _sg
4708 / 4403 / 380
Регистрация: 12.05.2012
Сообщений: 3,101
30.04.2014, 10:17
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
(defun count-all (w)
  (loop for a in w
        if (oddp a) count a into o
        else
        if (and (minusp a) (evenp a))
        count a into me
        else count a into r
        finally (return (values o me r))))
 
> (count-all '(11 -63 51 -32 -6 44 -59 55 -67 -24 0 -85 29))
8
3
2
Добавлено через 10 минут
Lisp
1
2
3
4
5
6
7
8
9
(defun count-all (w &optional (o 0) (me 0) (r 0)
                  &aux (a (car w)) (d (cdr w)))
  (cond ((null w) `(,o ,me ,r))
        ((oddp a) (count-all d (1+ o) me r))
        ((and (minusp a) (evenp a)) (count-all d o (1+ me) r))
        ((count-all d o me (1+ r)))))
 
> (count-all '(11 -63 51 -32 -6 44 -59 55 -67 -24 0 -85 29))
(8 3 2)
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.04.2014, 10:17
Помогаю со студенческими работами здесь

В двумерном массиве найти сумму положительных четных и отрицательных нечетных элементов
В массиве целых чисел А(n, m) найти по отдельности сумму положительных четных и отрицательных нечетных элементов. Как сделать?

Определить суммы четных, нечетных, положительных и отрицательных элементов исходного массива X(n)
3. Определить суммы четных, нечетных, положительных и отрицательных элементов исходного массива X(n).

Для чисел от -50 до 50 найти количество четных отрицательных и количество положительных нечетных чисел
Ребят,всем привет! Помогите пожалуйста решить данную задачу.Ее нужно написать на я зыке C /C++,каждую из них с постусловием и...

Определить сумму указанных элементов, количество нечетных элементов и среднее арифметическое четных элементов массива
Дан двумерный массив целых чисел. Определить: 1. Сумму элементов массива, больших 30 2. Количество нечетных элементов массива 3....

Поместить в начало списка L количество четных элементов, а в конец - количество нечетных
Помогите написать программу. При формировании списков значения элементов задавать произвольно. Каждый этап алгоритма оформить в виде...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru