Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/19: Рейтинг темы: голосов - 19, средняя оценка - 4.58
2 / 2 / 0
Регистрация: 23.10.2017
Сообщений: 34
Common Lisp

Как реализовать умножение целочисленных элементов списка в Lisp?

14.09.2019, 22:31. Показов 3813. Ответов 6

Студворк — интернет-сервис помощи студентам
Задание такое: "Задать рекурсивную функцию, вычисляющую произведение целых чисел из списка." , т.е. как я понял, если в списке не целые числа(всякие буквы и левые символы не в счет), то они не идут в счет произведения...

Как бы реализовал это на JS. но этот язык неподъемен... помогите реализовать это задание на lisp'е

JavaScript
1
2
3
4
5
6
7
8
9
10
11
function Almost(arr){
    if(arr.length === 0) return 1;
    else if(arr[arr.length - 1] % 1 !== 0){
      arr.splice(arr.length - 1, 1); 
      return Almost(arr);
    }
    else {
        return arr.pop() * Almost(arr);
    }
}
console.log(Almost([1,2,3,1.5,4,5,11.2,6])) // 720, т,е 1,5 - не учитывается
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.09.2019, 22:31
Ответы с готовыми решениями:

Длинная арифметика. Реализовать деление и умножение целочисленных чисел
Добрый день. Нужно реализовать деление и умножение целочисленных чисел Читал http://e-maxx.ru/algo/big_integer , деление длинного на...

Сравнение целочисленных элементов списка
в общем, сформировал список ,где i - номер блока. теперь мне надо: if(число1(исходного блока) > число1(из блока i)...

Создать два списка целочисленных элементов
РАБОТА СО СПИСКАМИ 1. Объявить и инициализировать первый список, содержащий 5 целочисленных элементов. Вывести на экран элементы списка....

6
 Аватар для _sg
4710 / 4405 / 380
Регистрация: 12.05.2012
Сообщений: 3,102
15.09.2019, 13:00
Лучший ответ Сообщение было отмечено danilAnisimov как решение

Решение

Lisp
1
2
3
4
5
6
7
(defun product (w)
  (cond ((null w) 1)
        ((integerp (car w)) (* (car w) (product (cdr w))))
        (t (product (cdr w)))))
 
> (product '(a 3 4/5 7))
21
Lisp
1
2
3
4
5
6
7
8
(defun product (w)
  (if w (* (if (integerp (car w)) (car w)
               1)
           (product (cdr w)))
      1))
 
> (product '(a 3 4/5 7))
21
Lisp
1
2
3
4
5
6
7
8
(defun product (w &aux (a (car w)))
  (if w (* (if (integerp a) a
               1)
           (product (cdr w)))
      1))
 
> (product '(a 3 4/5 7))
21
Lisp
1
2
3
4
5
6
7
(defun product (w)
  (reduce #'* w :key #'(lambda (a)
                         (if (integerp a) a
                             1))))
 
> (product '(a 3 4/5 7))
21
Lisp
1
2
3
4
5
6
7
(defun product (w)
  (loop for a in w
        when (integerp a) collect a into z
        finally (return (reduce #'* z))))
 
> (product '(a 3 4/5 7))
21
Lisp
1
2
3
4
5
(defun product (w)
  (reduce #'* (remove-if-not #'integerp w)))
 
> (product '(a 3 4/5 7))
21
Lisp
1
2
3
4
5
6
7
defun product (w &optional (z 1))
  (cond ((null w) z)
        ((integerp (car w)) (product (cdr w) (* z (car w))))
        (t (product (cdr w) z)))
 
> (product '(a 3 4/5 7))
21
Lisp
1
2
3
4
5
6
(defun product (w &optional (z 1) &aux (a (car w)))
  (if w (product (cdr w) (* (if (integerp a) a 1) z))
      z))
 
> (product '(a 3 4/5 7))
21
Lisp
1
2
3
4
5
(defun product (w)
  (eval (cons '* (remove-if-not #'integerp w))))
 
> (product '(a 3 4/5 7))
21
Lisp
1
2
3
4
5
6
7
(defun product (w &aux (z 1))
  (loop for a in w do
        (when (integerp a) (setf z (* z a)))
        finally (return z)))
 
> (product '(a 3 4/5 7))
21
Lisp
1
2
3
4
5
6
7
(defun product (w &aux (z 1))
  (loop for a in w do
        (when (integerp a) (setf z (* z a))))
  z)
 
> (product '(a 3 4/5 7))
21
3
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38194 / 21127 / 4309
Регистрация: 12.02.2012
Сообщений: 34,733
Записей в блоге: 14
15.09.2019, 16:41
Лучший ответ Сообщение было отмечено danilAnisimov как решение

Решение

HomeLisp:

Lisp
1
2
3
4
5
6
7
8
9
(defun prod-list (lst)
  (cond ((null lst) 1)
        ((fixedp (car lst)) (* (car lst) (prod-list (cdr lst))))
        (t (prod-list (cdr lst)))))
 
==> PROD-LIST
 
(prod-list '(a 3 4/5 7))
==> 21
3
 Аватар для _sg
4710 / 4405 / 380
Регистрация: 12.05.2012
Сообщений: 3,102
16.09.2019, 08:33
Lisp
1
2
3
4
5
6
7
8
(defun product (w)
  (reduce #'*
          (mapcan #'(lambda (a)
                      (when (integerp a) `(,a)))
                  w)))
 
> (product '(a 3 4/5 7))
21
Lisp
1
2
3
4
5
6
(defun product (w &aux (z 1))
  (dolist (a w z)
    (when (integerp a) (setf z (* z a )))))
 
> (product '(a 3 4/5 7))
21
1
Заблокирован
19.09.2019, 16:38
На Racket =)

Lisp
1
2
3
4
5
6
7
8
9
10
(define (multiply lst)
  (if (empty? lst)
      1
  (if (integer? (first lst))
      (* (first lst) (multiply (rest lst)))
      (multiply (rest lst)))))
 
(multiply '(1 2 3 5.4 4/1 5 'a))
 
=> 120
2
 Аватар для Вадим Тукаев
310 / 291 / 116
Регистрация: 23.01.2018
Сообщений: 933
27.09.2019, 18:15
Lisp
1
2
3
4
(defun mul-num (list)
  (if (null list)
    1
    (* (if (numberp (car list)) (car list) 1) (mul-num (cdr list)))))
2
 Аватар для _sg
4710 / 4405 / 380
Регистрация: 12.05.2012
Сообщений: 3,102
27.09.2019, 20:25
Lisp
1
2
3
4
5
6
7
8
(defun product (w)
  (if w (* (if (integerp (car w)) (car w)
               1)
           (product (cdr w)))
      1))
 
> (product '(a 3 4/5 7))
21
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.09.2019, 20:25
Помогаю со студенческими работами здесь

Сумма элементов списка Lisp
Написать программу: задан список. Найти сумму первого, третьего и седьмого элементов списка, если указанные элементы - числа. В противном...

GNU Common Lisp. сумма отрицательных элементов списка.
Дан список, к примеру '(-7 1 -2 4 9 -1 -3), нужно получить список '(-7 -2 -1 -3). в полученном списке подсчитать сумму. должно получиться...

[Lisp -> Erlang] Произведение элементов списка на четных/нечетных позициях
Имеется программа написанная в лиспе, нужно переделать на Erlang Подсчитывать произведение всех нечетных элементов списка (по месту...

Поочередное умножение элементов списка
Подскажите с помощью какой функции можно реализовать, или примерный алгоритм, если нужно перемножить два списка: x = ,] y= Так,...

Меню в lisp, как его реализовать ?
основные функции работы со списками


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru