С Новым годом! Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
3 / 3 / 0
Регистрация: 15.09.2018
Сообщений: 78
1
Scheme

Как реализовать процедуры decode и unpack?

08.11.2018, 02:55. Показов 1730. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите реализовать с на ЯП Scheme следующие две процедуры, обраные к определенным ранее:

1. Реализуйте процедуру unpack, разворачивающую список вида ((элемент число-повторов) ...) в список списков, каждый вложенный список которого состоит из указанного числа повторяющихся элементов:

(unpack '((a 3) (b 2) (c 1))) ⇒ ((a a a) (b b) (c))
2. Реализуйте процедуру decode, выполняющую действие, обратное действию процедуры encode:

(decode '((a 3) (b 2) (c 1))) ⇒ (a a a b b c)

Ранее определенные процедуры:
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(define (packhelper lst acc)
  (cond ((null? acc) (packhelper (cdr lst) (list (car lst))))
        ((null? lst) (list acc))
        ((equal? (car lst) (car acc)) (packhelper (cdr lst) (cons (car lst) acc)))
        (else (cons acc (packhelper (cdr lst) (list (car lst)))))))
(define (pack xs)
  (if (null? xs)
      '()
      (packhelper xs '())))
 
(define (encodehelper xs)
  (cond ((null? xs) '())
        ((not (null? xs)) (cons (cons (car (car xs)) (cons (length (car xs)) '())) (encodehelper (cdr xs))))))
 
(define (encode xs)
  (let ((ys (pack xs)))
    (encodehelper ys)))
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.11.2018, 02:55
Ответы с готовыми решениями:

Как реализовать запуск процедуры в процедуре
Доброго времени суток! Народ у меня такого рода вопрос вот есть у меня процедура таймер, нужно...

Реализовать функцию php unpack("L","test")
Здравствуйте. Не как не могу реализовать функцию php unpack("L","test") в delphi, даже не могу...

Процедура внутри процедуры это как реализовать
Добрый день есть программа работающая по клику на кнопку нужно что бы в нутри обработка происхдила...

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

4
4705 / 4400 / 380
Регистрация: 12.05.2012
Сообщений: 3,100
08.11.2018, 09:25 2
Common Lisp:
Lisp
1
2
3
4
5
6
(defun unpack (w)
  (loop for a in w collect
        (loop repeat (cadr a) collect (car a))))
 
> (unpack '((a 3) (b 2) (c 1)))
((A A A) (B B) (C))
Добавлено через 11 секунд
Lisp
1
2
3
4
5
6
7
(defun decode (w &optional (a (caar w)) (n (cadar w)))
  (cond ((null w) nil)
        ((plusp n) (cons a (decode w a (1- n))))
        (t (decode (cdr w)))))
 
> (decode '((a 3) (b 2) (c 1)))
(A A A B B C)
2
Модератор
Эксперт функциональных языков программированияЭксперт Python
37413 / 20785 / 4278
Регистрация: 12.02.2012
Сообщений: 34,196
Записей в блоге: 14
08.11.2018, 09:55 3
Lisp
1
2
3
4
5
6
7
8
9
10
11
(define (p2l p)
  (if (= 0 (cadr p)) '() (cons (car p) (p2l (list (car p) (- (cadr p) 1))))))
  
(define (decode lstp)
    (if (null? lstp) '() (append (p2l (car lstp)) (decode (cdr lstp)))))
 
(define (unpack lstp)
    (if (null? lstp) '() (append (list (p2l (car lstp))) (unpack (cdr lstp)))))
 
 
(display (unpack '((a 3) (b 2) (c 1))))
https://ideone.com/qVp5t6
2
80 / 77 / 8
Регистрация: 19.06.2015
Сообщений: 126
08.11.2018, 19:23 4
Lisp
1
2
3
4
5
6
7
8
9
(defun tf (lst &optional tmp)
       (if (null lst)
           tmp
           (tf (cdr lst) 
           (append tmp 
               (list (make-list (nth 1 (car lst)) :initial-element (nth 0 (car lst))))))))
 
CL-USER> (tf '((a 3) (b 2) (c 1)))
((A A A) (B B) (C))
Это Common Lisp. К сожалению, не сразу заметил слово Scheme, но не пропадать же труду, верно?

Добавлено через 2 минуты
Lisp
1
2
3
4
5
6
7
8
(defun tf (lst &optional tmp)
       (if (null lst)
           tmp
           (tf (cdr lst) 
           (append tmp (make-list (nth 1 (car lst)) :initial-element (nth 0 (car lst)))))))
 
CL-USER> (tf '((a 3) (d 10) (b 2) (c 1)))
(A A A D D D D D D D D D D B B C)
2
4705 / 4400 / 380
Регистрация: 12.05.2012
Сообщений: 3,100
09.11.2018, 08:33 5
Lisp
1
2
3
4
5
6
7
(defun encode (w &optional (b (car w )) (n 0))
  (cond ((null w) (list (list b n)))
        ((eq b (car w)) (encode (cdr w) b (1+ n)))
        (t (cons (list b n) (encode (cdr w) (car w) 1)))))
 
> (encode '(a a a b b c))
((A 3) (B 2) (C 1))
Lisp
1
2
3
4
5
6
(defun decode (w)
  (loop for a in w nconc
        (loop repeat (cadr a) collect (car a))))
 
> (decode '((a 3) (b 2) (c 1)))
(A A A B B C)
Lisp
1
2
3
4
5
6
7
(defun unpack (w)
  (mapcar #'(lambda (a)
              (loop repeat (cadr a) collect (car a)))
          w))
 
> (unpack '((a 3) (b 2) (c 1)))
((A A A) (B B) (C))
варианты:
Lisp
1
2
3
4
5
6
7
8
9
(defun decode (w &optional ac)
  (if w (decode (cdr w)
                (nconc ac (make-list (cadar w)
                                     :initial-element
                                     (caar w))))
      ac))
 
> (decode '((a 3) (b 2) (c 1)))
(A A A B B C)
Lisp
1
2
3
4
5
6
7
8
9
(defun unpack (w &optional ac)
  (if w (unpack (cdr w)
                (nconc ac `(,(make-list (cadar w)
                                        :initial-element
                                        (caar w)))))
      ac))
 
> (unpack '((a 3) (b 2) (c 1)))
((A A A) (B B) (C))
Lisp
1
2
3
4
5
6
7
(defun decode (w &optional ac)
  (if w (decode (cdr w) (nconc ac (loop repeat (cadar w) 
                                        collect (caar w))))
      ac))
 
> (decode '((a 3) (b 2) (c 1)))
(A A A B B C)
Lisp
1
2
3
4
5
6
7
(defun unpack (w &optional ac)
  (if w (unpack (cdr w) (nconc ac `(,(loop repeat (cadar w) 
                                           collect (caar w)))))
      ac))
 
> (unpack '((a 3) (b 2) (c 1)))
((A A A) (B B) (C))
Добавлено через 10 часов 3 минуты
Lisp
1
2
3
4
5
6
7
(defun decode (w)
  (mapcan #'(lambda (a)
              (loop repeat (cadr a) collect (car a)))
          w))
 
> (decode '((a 3) (b 2) (c 1)))
(A A A B B C)
2
09.11.2018, 08:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.11.2018, 08:33
Помогаю со студенческими работами здесь

Аналог процедуры str в Си++ или как реализовать?
Доброго времени суток. Есть строка кода на Паскале: Str(X:Lens,Stroka); Нужно записать...

Как реализовать процедуры, использующие друг друга?
В моем проекте присутствуют 2 процедуры. kompdown и kompdown1. Во время выполнения программы...

Реализовать дек как массив, создать процедуры добавления и удаления
надо реализовать дек через массив. такой вопрос. дек - это как бэ очередь с возможностями...

Как добавить лого в шаблоне decode
Здравствуйте уважаемые форумчане. Я пока новичёк по вордпрессу и программированию. Решил взять...


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

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