Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 07.02.2015
Сообщений: 68

Пример LISP задача

07.10.2016, 23:40. Показов 2797. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста, для очередной лабораторной работы скинули задачу вот такую.
Найти все натуральные числа которые меньше либо равны N и которые в свою очередь делятся без остатки на компоненты цифры числа N. К примеру число N = 13, Компоненты Цифры N = 1,3. Следовательно надо найти числа которые делятся и на 1 и на 3 без остатка.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.10.2016, 23:40
Ответы с готовыми решениями:

Перевести пример на язык LISP
Помогите перевести пример на язык LISP

Задача на Lisp
Здравствуйте всем , привет всем. Нужна помощь в написании программы на Lisp. Вот задание: Rec_evg ;;рекурсия ...

Задача lisp
дан список lst. Если первый элемент является списком, то вывести новый список, первый элемент которого будет хвост lst, а второй головой....

7
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38203 / 21135 / 4310
Регистрация: 12.02.2012
Сообщений: 34,741
Записей в блоге: 14
08.10.2016, 10:40
HomeLisp:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(defun task (n)
 (let ((r nil))
   (iter (for i from 1 to n)
     (let ((s 0))
        (iter (for k in (explode i)) (when (/= k 0)(summing (% i k) into s)))
        (when (zerop s) (collecting i into r))))))
 
==> TASK
 
(task 20)
 
==> (1 2 3 4 5 6 7 8 9 10 11 12 15 20)
 
(task 40)
 
==> (1 2 3 4 5 6 7 8 9 10 11 12 15 20 22 24 30 33 36 40)
1
0 / 0 / 0
Регистрация: 07.02.2015
Сообщений: 68
08.10.2016, 13:15  [ТС]
Простите я немного запутался. К примеру функция принимает в качестве параметра число 20, если я не ошибаюсь результат должен быть следующим. Найти все натуральные числа которые меньше либо равна 20 и делятся без остатка на 2 и 0 ( т.к 2 и 0 составляющие числа 20 ) на 0 делить нельзя следовательно остаётся только 2. И в результате должны быть следующие числа (2 4 6 8 10 12 14 16 18 20) . Если взять пример с числом 13 то результат будет (3 6 9 12 15 18 ). Я вроде бы так понял задание.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38203 / 21135 / 4310
Регистрация: 12.02.2012
Сообщений: 34,741
Записей в блоге: 14
08.10.2016, 14:33
Да, я решил немного не ту задачу. Я искал все числа, меньшие N, каждое из которых делится на все свои цифры (кроме нуля). Вот то, что надо:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
(defun task (n)
 (let ((r nil))
   (iter (for i from 1 to n)
     (let ((s 0))
        (iter (for k in (explode n)) (when (/= k 0)(summing (% i k) into s)))
        (when (zerop s) (collecting i into r))))))
 
 
==> task
 
(task 20)
 
==> (2 4 6 8 10 12 14 16 18 20)
1
0 / 0 / 0
Регистрация: 07.02.2015
Сообщений: 68
08.10.2016, 14:50  [ТС]
Простите, сильно сглупил, оказывается на форму уже куча решений этой задачи. Буду разбираться.
0
0 / 0 / 0
Регистрация: 07.02.2015
Сообщений: 68
13.10.2016, 20:29  [ТС]
Увидел очень много примеров, но во всех примерах проверка деления на 0 неправильно работает. Когда запускаю ваш пример, то сталкиваюсь со следующей ошибкой. Приложил скриншот и текст. Порыскал на форуме, я понял что дело в какой-то библиотеке, которую я не подключил, я не в курсе как это сделать. Пытаюсь всё это сделать с помощью GNU CLISP 2.49 и LISP IDE, посоветуйте что-то.
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
*** - EVAL: функция ITER не определена
Имеются следующие варианты продолжения:
USE-VALUE      :R1      Input a value to be used instead of (FDEFINITION 'ITER).
RETRY          :R2      Еще раз
STORE-VALUE    :R3      Input a new value for (FDEFINITION 'ITER).
ABORT          :R4      Прервать цикл отладки
ABORT          :R5      Прервать цикл отладки
ABORT          :R6      Прервать цикл отладки
ABORT          :R7      Прервать цикл отладки
ABORT          :R8      Прервать цикл отладки
ABORT          :R9      Прервать цикл отладки
ABORT          :R10     Прервать цикл отладки
ABORT          :R11     Прервать цикл отладки
ABORT          :R12     Прервать цикл отладки
ABORT          :R13     Прервать цикл отладки
ABORT          :R14     Прервать цикл отладки
ABORT          :R15     Прервать цикл отладки
ABORT          :R16     Прервать главный цикл
Миниатюры
Пример LISP задача  
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38203 / 21135 / 4310
Регистрация: 12.02.2012
Сообщений: 34,741
Записей в блоге: 14
14.10.2016, 10:48
Лучший ответ Сообщение было отмечено AlexIach как решение

Решение

Вот так:

Lisp
1
2
3
4
5
6
7
8
9
10
11
 (defun task (n)
 (let ((r nil) (d nil) (m n) (k 0))
   (loop
      (when (zerop m) (return nil))
      (setq k (rem m 10) m (truncate (/ m 10)))
      (when (> k 0) (push k d)))  
   (dotimes (i n r)
     (let ((s 0) (ii (+ i 1)))
        (dolist (k d nil)
          (setq s (+ s (rem ii k))))
        (when (zerop s) (push ii r))))))
1
 Аватар для _sg
4710 / 4405 / 380
Регистрация: 12.05.2012
Сообщений: 3,102
26.12.2016, 09:10
как вариант:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
(defun int-digits (n &optional ac)
  (if (zerop n) ac 
      (int-digits (truncate n 10)
                  (cons (rem n 10) ac))))
 
(defun perfect (n)
  (loop for a from 1 to n
        when (loop for b in (remove 0 (int-digits n))
                   always (zerop (rem a b)))
        collect a))
 
> (perfect 234)
(12 24 36 48 60 72 84 96 108 120 132 144 156 168 180 192 204 216 228))
Добавлено через 3 минуты
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
defun int-digits (n &optional ac)
  (if (zerop n) ac 
      (int-digits (truncate n 10)
                  (cons (rem n 10) ac))))
 
(defun perfect (n)
  (loop for a from 1 to n
        when (loop for b in (remove 0 (int-digits n))
                   never (plusp (rem a b)))
        collect a))
 
> (perfect 13)
(3 6 9 12)
> (perfect 20)
(2 4 6 8 10 12 14 16 18 20)
Добавлено через 20 часов 37 минут
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
(defun int-digits-zero- (n &optional ac &aux (r (rem n 10)))
  (if (zerop n) ac 
      (int-digits (truncate n 10)
                  (if (zerop r) ac (cons r ac)))))
 
(defun perfect (n)
  (loop for a from 1 to n
        when (loop for b in (int-digits-zero- n)
                   always (zerop (rem a b)))
        collect a))
 
> (perfect 234)
(12 24 36 48 60 72 84 96 108 120 132 144 156 168 180 192 204 216 228)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.12.2016, 09:10
Помогаю со студенческими работами здесь

Задача по Lisp
В научное сообщество входят N человек. Написать программу, которая определяет, сколько существует возможных вариантов назначить его...

Логическая задача на Lisp
Здравствуйте! Помогите с задачей, пожалуйста! Стол разграфлен на 6 квадратов, в каждом из которых, кроме одного, помещается какой-нибудь...

Реверс многоуровневого списка
Помогите пожалуйста написать полный код, в котором будет реализовываться функция MyReverseTree: то есть, если у нас узел в списке, будет...

Очень простая задача на Lisp
Здравствуйте, помогите решить очень простую задачу на лиспе. Дан список, содержащий подсписки. Написать функцию, которая возвращает...

Задача список и 2 числа LISP
Помогите, пожалуйста решить задачу по LISPу! картинка удалена]


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru