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

Написать функцию, возвращающую список из n копий заданного атома x

07.09.2012, 16:57. Просмотров 3378. Ответов 3
Метки нет (Все метки)


В lisp'e совсем плох. Надо решить три задачки. Написать функцию:
1.Возвращающую список из n копий заданного атома x. (Например, x=4, n=5 -> (4 4 4 4 4)
2.Добавляющую заданный паpаметpом x символ после каждого неотрицательного элемента списка L. (Например, x=*, L=(-1 6 -3 0) -> (-1 (6 *) -3 (0 *))).
3.Преобразующую список в "двойной" список таким образом, чтобы каждый элемент удвоился. (Например, (1 2 3) -> (1 1 2 2 3 3)).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.09.2012, 16:57
Ответы с готовыми решениями:

Clojure Определить функцию, возвращающую список из n копий заданного атома
продолжаю разбираться с этим языком, возникла трудность с этим заданием, кто что может подсказать?...

Clojure Определить функцию, возвращающую список из n копий заданного атома x
Опpеделить функцию Возвращающую список из n копий заданного атома x. Например, x=4, n=5 –> (4 4 4...

Список атомов. Написать программу, возвращающую список заданного вида
приветствую всех! очень нужно решить задачу, ну никак не идёт! заранее всем спасибо Есть список...

Написать функцию, возвращающую список частот атомов, входящих в исходный список
Ребят, и еще одна задачка на написание функции. Написать функцию, возвращающую для заданного...

__________________
Помогаю в написании студенческих работ здесь.
3
Модератор
Эксперт Python
28417 / 15309 / 3018
Регистрация: 12.02.2012
Сообщений: 25,070
Записей в блоге: 4
07.09.2012, 18:17 2
Первая:

Lisp
1
2
3
4
5
6
7
8
9
(defun replicate (x n)  ;; классическое элементарное решение
   (cond ((= n 1) '(x))
           (t (cons x (replicate x (- n 1))))))
 
==> replicate
 
(replicate 'a 10)
 
==> (a a a a a a a a a x)
Lisp
1
2
3
4
5
6
7
8
9
(defun replicate (x n)  
   (let ((r nil)) 
        (dotimes (i n r) (setq r (cons x r)))))
 
==> replicate
 
(replicate '(a b c) 10)
 
==> ((a b c) (a b c) (a b c) (a b c) (a b c) (a b c) (a b c) (a b c) (a b c) (a b c))
Добавлено через 7 минут
Третья:


Lisp
1
2
3
4
5
6
7
8
9
(defun duplicate (x)  ;; рекурсивный вариант
   (cond ((null x) nil)
         (t (cons (car x) (cons (car x) (duplicate (cdr x)))))))
 
==> duplicate
 
(duplicate '(1 2 3 4))
 
==> (1 1 2 2 3 3 4 4)
Lisp
1
2
3
4
5
6
7
8
9
(defun duplicate (x)  ;; нерекурсивный вариант
  (let ((r nil))
       (dolist (i x r) (setq r (append r (list i i))))))
 
==> duplicate
 
(duplicate '(1 2 3 4))
 
==> (1 1 2 2 3 3 4 4)
Вторая:

Lisp
1
2
3
4
5
6
7
8
9
10
(defun task-2 (x sym)  ;; рекурсивный вариант
    (cond ((null x) nil)
          (t (if (>= (car x) 0) (append (list (list (car x) sym)) (task-2 (cdr x) sym))
                               (append (cons (car x) (task-2 (cdr x) sym)))))))
 
==> task-2
 
(task-2 '(1 2 3 -5 7 -6) '*)
 
==> ((1 *) (2 *) (3 *) -5 (7 *) -6)
Добавлено через 11 минут
Вторая (доп):

Lisp
1
2
3
4
5
6
7
8
9
10
11
(defun task-2 (x sym) ;; нерекурсивный вариант
  (let ((r nil))
       (dolist (i x r)
           (if (>= i 0) (setq r (append r (list (list i sym))))
                       (setq r (append r (list i)))))))
 
==> task-2
 
(task-2 '(1 2 3 -5 7 -6 8 9 0 0 0) '*)
 
==> ((1 *) (2 *) (3 *) -5 (7 *) -6 (8 *) (9 *) (0 *) (0 *) (0 *))
Добавлено через 19 минут
Вот еще одно решение 2-й задачи:

Lisp
1
2
3
4
5
6
7
8
(defun task-2 (x sym) ;; очень лисповское, с функцией высшего порядка
  (mapcar #'(lambda (y) (if (>= y 0) (list y sym) y)) x))
 
==> task-2
 
(task-2 '(1 2 3 0 0 -4 -7 -7 0) '*)
 
==> ((1 *) (2 *) (3 *) (0 *) (0 *) -4 -7 -7 (0 *))
1
Эксперт С++
5816 / 3468 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
08.09.2012, 03:34 3
Цитата Сообщение от Catstail Посмотреть сообщение
Первая:
последний элемент в получившимся списке немного не тот

Еще варианты с циклом loop:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
;;; Возвращающую список из n копий заданного атома x.
;;; (Например, x=4, n=5 -> (4 4 4 4 4)
(defun replicate (item count)
  (loop repeat count collecting item))
 
;;; Добавляющую заданный паpаметpом x символ после каждого
;;; неотрицательного элемента списка L.
;;; (Например, x=*, L=(-1 6 -3 0) -> (-1 (6 *) -3 (0 *))).
(defun insert-symbol (list s)
  (loop for item in list
        collect (if (minusp item) item `(,item ,s))))
 
;;; Преобразующую список в "двойной" список таким образом, чтобы каждый элемент удвоился.
;;; (Например, (1 2 3) -> (1 1 2 2 3 3)).
(defun duplicate (list)
  (loop for item in list nconcing `(,item ,item)))
2
Модератор
Эксперт Python
28417 / 15309 / 3018
Регистрация: 12.02.2012
Сообщений: 25,070
Записей в блоге: 4
08.09.2012, 07:04 4
Цитата Сообщение от Nameless One Посмотреть сообщение
последний элемент в получившимся списке немного не тот
- ой, Вы правы... Ошибочка, но легко поправимая.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.09.2012, 07:04

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

Написать m-функцию, возвращающую значение заданного выражения
1. Написать m-функцию, возвращающую значение заданного выражения (см. таблицу) при произвольных...

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

Используя do, написать функцию возвращающую первый нечисловой элемент заданного списка.
Используя do, написать функцию возвращающую первый нечисловой элемент заданного списка. Заранее...

Дан список. Написать функцию, которая возвращает количество уровней сложного списка на которых есть два не числовых атома
Добрый вечер, такая вот задача Дан список ((a (2 b c 6) 7) d e ((9 f g) 12 (h 14) 15) ... )....


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

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

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