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

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

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

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

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

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

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

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

7
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
08.10.2016, 10:40 2
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  [ТС] 3
Простите я немного запутался. К примеру функция принимает в качестве параметра число 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
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
08.10.2016, 14:33 4
Да, я решил немного не ту задачу. Я искал все числа, меньшие 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  [ТС] 5
Простите, сильно сглупил, оказывается на форму уже куча решений этой задачи. Буду разбираться.
0
0 / 0 / 0
Регистрация: 07.02.2015
Сообщений: 68
13.10.2016, 20:29  [ТС] 6
Увидел очень много примеров, но во всех примерах проверка деления на 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
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
14.10.2016, 10:48 7
Лучший ответ Сообщение было отмечено 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
4699 / 4394 / 380
Регистрация: 12.05.2012
Сообщений: 3,096
26.12.2016, 09:10 8
как вариант:
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
26.12.2016, 09:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.12.2016, 09:10
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru