Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
1 / 1 / 0
Регистрация: 11.10.2014
Сообщений: 17
1

Напишите функцию (f N ), которая выдает список всех последовательностей (списков)

27.10.2014, 08:14. Показов 1237. Ответов 9
Метки нет (Все метки)

Помогите решить задачу на Home Lisp.Напишите функцию (f N ), которая выдает список всех последовательностей (списков) из N нулей, единиц и двоек, в которых никакая цифра не повторяется два раза подряд (нет куска вида XX).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.10.2014, 08:14
Ответы с готовыми решениями:

Напишите функцию (f X Y), которая возвращает список Z - "пересечение" списков X г: Y, т.е. список, содержащий их общие
Здравствуйте , из-за моих плохих занний lisp возникла проблема с задачей, буду благодарен если...

Определить функцию, зависящую от списков u и v, которая вычисляет список всех элементов
Здравствуйте всем. Задали задание, выполнил, все работает нормально, но нужно с использованием...

Clojure Определить функцию , которая выдает список всех элементов списка (V) встречающихся в нем более одного раза
Помогите решить такую задачку : Определить функцию (f V) , которая выдает список всех элементов...

напишите функцию, которая спрашивает у пользователя ФИО студента из группы (список группы составлен раньше) и выдает следующие данные о нем: год рожде
Помогите пожалуйста тошо вообще не пойму как делать напишите функцию, которая спрашивает у...

9
Модератор
Эксперт Python
28590 / 15454 / 3053
Регистрация: 12.02.2012
Сообщений: 25,333
Записей в блоге: 4
27.10.2014, 10:49 2
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
;; Перевод в троичную систему счисления
 
(defun conv (n &optional (r nil))
 (cond ((< n 3) (cons n r))
       (t (conv (\ n 3) (cons (% n 3) r))))) 
 
;; Проверка списка 
 
(defun chk (lst)
  (cond ((null (cdr lst)) t)
        ((= (car lst) (cadr lst)) nil)
        (t (chk (cdr lst)))))
 
;; Решение
 
 
(defun task (n)
  (let ((b (^ 3 n)) (e (- (^ 3 (+ n 1)) 1)) (res nil))
    (iter (for i from b to e) 
       (let ((l (conv i)))
         (when (chk l) (collecting l into res))))
    res))
 
;; Запуск
 
(task 4)
 
==> ((1 0 1 0 1) (1 0 1 0 2) (1 0 1 2 0) (1 0 1 2 1) (1 0 2 0 1) (1 0 2 0 2) (1 0 2 1 0) (1 0 2 1 2) (1 2 0 1 0) (1 2 0 1 2) (1 2 0 2 0) (1 2 0 2 1) (1 2 1 0 1) (1 2 1 0 2) (1 2 1 2 0) (1 2 1 2 1) (2 0 1 0 1) (2 0 1 0 2) (2 0 1 2 0) (2 0 1 2 1) (2 0 2 0 1) (2 0 2 0 2) (2 0 2 1 0) (2 0 2 1 2) (2 1 0 1 0) (2 1 0 1 2) (2 1 0 2 0) (2 1 0 2 1) (2 1 2 0 1) (2 1 2 0 2) (2 1 2 1 0) (2 1 2 1 2))
1
1 / 1 / 0
Регистрация: 11.10.2014
Сообщений: 17
27.10.2014, 22:17  [ТС] 3
А можно как нибудь решить эту задачу без использования этих условий ? Я просто не сталкивался с этим да и даже не слышал , а то думаю преподаватель будет против данному решению
Цитата Сообщение от Catstail Посмотреть сообщение
(iter (for i from b to e)
Цитата Сообщение от Catstail Посмотреть сообщение
(when
0
Модератор
Эксперт Python
28590 / 15454 / 3053
Регистрация: 12.02.2012
Сообщений: 25,333
Записей в блоге: 4
28.10.2014, 12:08 4
Lisp
1
2
3
4
5
6
7
8
9
10
11
(defun task (n)
  (let ((b (^ 3 n)) (e (- (^ 3 (+ n 1)) 1)) (res nil))
    (dolist (i (range b e) res)
       (let ((l (conv i)))
         (if (chk l) (push l res) nil)))))
 
==> task
 
(task 5)
 
==> ((2 1 2 1 2 1) (2 1 2 1 2 0) (2 1 2 1 0 2) (2 1 2 1 0 1) (2 1 2 0 2 1) (2 1 2 0 2 0) (2 1 2 0 1 2) (2 1 2 0 1 0) (2 1 0 2 1 2) (2 1 0 2 1 0) (2 1 0 2 0 2) (2 1 0 2 0 1) (2 1 0 1 2 1) (2 1 0 1 2 0) (2 1 0 1 0 2) (2 1 0 1 0 1) (2 0 2 1 2 1) (2 0 2 1 2 0) (2 0 2 1 0 2) (2 0 2 1 0 1) (2 0 2 0 2 1) (2 0 2 0 2 0) (2 0 2 0 1 2) (2 0 2 0 1 0) (2 0 1 2 1 2) (2 0 1 2 1 0) (2 0 1 2 0 2) (2 0 1 2 0 1) (2 0 1 0 2 1) (2 0 1 0 2 0) (2 0 1 0 1 2) (2 0 1 0 1 0) (1 2 1 2 1 2) (1 2 1 2 1 0) (1 2 1 2 0 2) (1 2 1 2 0 1) (1 2 1 0 2 1) (1 2 1 0 2 0) (1 2 1 0 1 2) (1 2 1 0 1 0) (1 2 0 2 1 2) (1 2 0 2 1 0) (1 2 0 2 0 2) (1 2 0 2 0 1) (1 2 0 1 2 1) (1 2 0 1 2 0) (1 2 0 1 0 2) (1 2 0 1 0 1) (1 0 2 1 2 1) (1 0 2 1 2 0) (1 0 2 1 0 2) (1 0 2 1 0 1) (1 0 2 0 2 1) (1 0 2 0 2 0) (1 0 2 0 1 2) (1 0 2 0 1 0) (1 0 1 2 1 2) (1 0 1 2 1 0) (1 0 1 2 0 2) (1 0 1 2 0 1) (1 0 1 0 2 1) (1 0 1 0 2 0) (1 0 1 0 1 2) (1 0 1 0 1 0))
2
1 / 1 / 0
Регистрация: 11.10.2014
Сообщений: 17
23.11.2014, 18:26  [ТС] 5
Цитата Сообщение от Catstail Посмотреть сообщение
Lisp
1
2
3
4
5
6
7
8
9
10
11
(defun task (n)
  (let ((b (^ 3 n)) (e (- (^ 3 (+ n 1)) 1)) (res nil))
    (dolist (i (range b e) res)
       (let ((l (conv i)))
         (if (chk l) (push l res) nil)))))
 
==> task
 
(task 5)
 
==> ((2 1 2 1 2 1) (2 1 2 1 2 0) (2 1 2 1 0 2) (2 1 2 1 0 1) (2 1 2 0 2 1) (2 1 2 0 2 0) (2 1 2 0 1 2) (2 1 2 0 1 0) (2 1 0 2 1 2) (2 1 0 2 1 0) (2 1 0 2 0 2) (2 1 0 2 0 1) (2 1 0 1 2 1) (2 1 0 1 2 0) (2 1 0 1 0 2) (2 1 0 1 0 1) (2 0 2 1 2 1) (2 0 2 1 2 0) (2 0 2 1 0 2) (2 0 2 1 0 1) (2 0 2 0 2 1) (2 0 2 0 2 0) (2 0 2 0 1 2) (2 0 2 0 1 0) (2 0 1 2 1 2) (2 0 1 2 1 0) (2 0 1 2 0 2) (2 0 1 2 0 1) (2 0 1 0 2 1) (2 0 1 0 2 0) (2 0 1 0 1 2) (2 0 1 0 1 0) (1 2 1 2 1 2) (1 2 1 2 1 0) (1 2 1 2 0 2) (1 2 1 2 0 1) (1 2 1 0 2 1) (1 2 1 0 2 0) (1 2 1 0 1 2) (1 2 1 0 1 0) (1 2 0 2 1 2) (1 2 0 2 1 0) (1 2 0 2 0 2) (1 2 0 2 0 1) (1 2 0 1 2 1) (1 2 0 1 2 0) (1 2 0 1 0 2) (1 2 0 1 0 1) (1 0 2 1 2 1) (1 0 2 1 2 0) (1 0 2 1 0 2) (1 0 2 1 0 1) (1 0 2 0 2 1) (1 0 2 0 2 0) (1 0 2 0 1 2) (1 0 2 0 1 0) (1 0 1 2 1 2) (1 0 1 2 1 0) (1 0 1 2 0 2) (1 0 1 2 0 1) (1 0 1 0 2 1) (1 0 1 0 2 0) (1 0 1 0 1 2) (1 0 1 0 1 0))
Catstail, А не могли бы Вы, написать эту программу без циклов , а только используя рекурсивные вызовы?
0
Модератор
Эксперт Python
28590 / 15454 / 3053
Регистрация: 12.02.2012
Сообщений: 25,333
Записей в блоге: 4
23.11.2014, 18:50 6
Lisp
1
2
3
4
5
6
7
8
9
10
11
(defun task (n &optional (b (^ 3 n)) (e (- (^ 3 (+ n 1)) 1)) (res nil))
   (if (> b e) res 
     (let ((l (conv b)))
       (if (chk l) (task n (+ b 1) e (cons l res))
                   (task n (+ b 1) e res))))) 
 
==> task
 
(task 4)
 
==> ((2 1 2 1 2) (2 1 2 1 0) (2 1 2 0 2) (2 1 2 0 1) (2 1 0 2 1) (2 1 0 2 0) (2 1 0 1 2) (2 1 0 1 0) (2 0 2 1 2) (2 0 2 1 0) (2 0 2 0 2) (2 0 2 0 1) (2 0 1 2 1) (2 0 1 2 0) (2 0 1 0 2) (2 0 1 0 1) (1 2 1 2 1) (1 2 1 2 0) (1 2 1 0 2) (1 2 1 0 1) (1 2 0 2 1) (1 2 0 2 0) (1 2 0 1 2) (1 2 0 1 0) (1 0 2 1 2) (1 0 2 1 0) (1 0 2 0 2) (1 0 2 0 1) (1 0 1 2 1) (1 0 1 2 0) (1 0 1 0 2) (1 0 1 0 1))
0
1 / 1 / 0
Регистрация: 11.10.2014
Сообщений: 17
24.11.2014, 08:41  [ТС] 7
Цитата Сообщение от Catstail Посмотреть сообщение
Lisp
1
2
3
4
5
6
7
8
9
10
11
(defun task (n &optional (b (^ 3 n)) (e (- (^ 3 (+ n 1)) 1)) (res nil))
   (if (> b e) res 
     (let ((l (conv b)))
       (if (chk l) (task n (+ b 1) e (cons l res))
                   (task n (+ b 1) e res))))) 
 
==> task
 
(task 4)
 
==> ((2 1 2 1 2) (2 1 2 1 0) (2 1 2 0 2) (2 1 2 0 1) (2 1 0 2 1) (2 1 0 2 0) (2 1 0 1 2) (2 1 0 1 0) (2 0 2 1 2) (2 0 2 1 0) (2 0 2 0 2) (2 0 2 0 1) (2 0 1 2 1) (2 0 1 2 0) (2 0 1 0 2) (2 0 1 0 1) (1 2 1 2 1) (1 2 1 2 0) (1 2 1 0 2) (1 2 1 0 1) (1 2 0 2 1) (1 2 0 2 0) (1 2 0 1 2) (1 2 0 1 0) (1 0 2 1 2) (1 0 2 1 0) (1 0 2 0 2) (1 0 2 0 1) (1 0 1 2 1) (1 0 1 2 0) (1 0 1 0 2) (1 0 1 0 1))
Catstail, а почему у нас на входе n (допустим n равно 3 ) , а на выходе получается n+1 . Должно же быть , например вводим 2 , и наша последовательность будет такая : (0 1) (1 0) (1 2 ) (2 1) (2 0 ) (0 2) , а у вас же получается (1 0 1 ) (1 0 2) и т.д. ?
0
Модератор
Эксперт Python
28590 / 15454 / 3053
Регистрация: 12.02.2012
Сообщений: 25,333
Записей в блоге: 4
24.11.2014, 10:40 8
Да, можно поправить.

Добавлено через 4 минуты
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
(defun task (n &optional (b (^ 3 (- n 1))) (e (- (^ 3 n) 1)) (res nil))
   (if (> b e) res 
     (let ((l (conv b)))
       (if (chk l) (task n (+ b 1) e (cons l res))
                   (task n (+ b 1) e res))))) 
 
==> task
 
(defun conv (n &optional (r nil))
 (cond ((< n 3) (cons n r))
       (t (conv (\ n 3) (cons (% n 3) r))))) 
 
==> conv
 
(defun chk (lst)
  (cond ((null (cdr lst)) t)
        ((= (car lst) (cadr lst)) nil)
        (t (chk (cdr lst)))))
 
==> chk
 
(task 2)
 
==> ((2 1) (2 0) (1 2) (1 0))
0
1 / 1 / 0
Регистрация: 11.10.2014
Сообщений: 17
24.11.2014, 14:16  [ТС] 9
Цитата Сообщение от Catstail Посмотреть сообщение
Да, можно поправить.

Добавлено через 4 минуты
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
(defun task (n &optional (b (^ 3 (- n 1))) (e (- (^ 3 n) 1)) (res nil))
   (if (> b e) res 
     (let ((l (conv b)))
       (if (chk l) (task n (+ b 1) e (cons l res))
                   (task n (+ b 1) e res))))) 
 
==> task
 
(defun conv (n &optional (r nil))
 (cond ((< n 3) (cons n r))
       (t (conv (\ n 3) (cons (% n 3) r))))) 
 
==> conv
 
(defun chk (lst)
  (cond ((null (cdr lst)) t)
        ((= (car lst) (cadr lst)) nil)
        (t (chk (cdr lst)))))
 
==> chk
 
(task 2)
 
==> ((2 1) (2 0) (1 2) (1 0))
Catstail, а вы бы не могли подробно объяснить что происходит в каждой функции ? и что за формула в task ? я не могу ни как понять .
0
Модератор
Эксперт Python
28590 / 15454 / 3053
Регистрация: 12.02.2012
Сообщений: 25,333
Записей в блоге: 4
24.11.2014, 14:59 10
MrR, давай, я уж и сдам за тебя... Ты где учишься?
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.11.2014, 14:59

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Напишите функцию remove_duplicates, которая берет список и возвращает новый список без повторов
Напишите функцию remove_duplicates, которая берет список и возвращает новый список, в котором...

Описать функцию, которая, чередуя элементы списков, образует новый список
Описать функцию, которая, чередуя элементы списков: (a b c … ) и (1 2 3 …), образует новый список...

Опишите неименованные функцию, которая: объединяет остальные элементы трех списков в один список.
1) Опишите неименованные функцию, которая: объединяет остальные элементы трех списков в один...

Запишите, пожалуйста, функцию, которая позволяет объединить главы трех списков в один список:
Запишите, пожалуйста, функцию, которая позволяет объединить главы трех списков в один список: (T Y...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.