20983

Функционалы

Лабораторная работа

Информатика, кибернетика и программирование

DEFUN SORT FileName File1 File2 File3 File4 SETQ F OPENINPUTFILE FileName SETQ F1 OPENOUTPUTFILE File1 SETQ F2 OPENOUTPUTFILE File2 SETQ F3 OPENOUTPUTFILE File3 SETQ F4 OPENOUTPUTFILE File4 IF NOT EQ NIL F LOOP EQ NIL SETQ X READ F SORT_IS_FINISHED COND NUMBERP X WRITE X F1 LISTP X WRITE X F2 ;EQ SYM TYPE X WRITE X F3 T WRITE X F4 ERROR_WRONG_FILE_NAME .

Русский

2013-08-02

20.7 KB

3 чел.

Лабораторная работа № 5.

Функционалы.

  1.  Сформировать список,  содержащий номера позиций  элементов исходного списка, удовлетворяющих заданному условию.

(DEFUN  F21_1  (L F K)

(COND ((NULL L)  NIL)

((FUNCALL F (CAR L)) (CONS K (F21_1 (CDR L) F (+ K 1))))  

(T (F21_1 (CDR L) F (+ K 1)))

)

)

(DEFUN F21 (L F)

(COND ((NOT (LISTP L)) ERROR!_WRONG_LIST_ARGUMENT!)

((NULL L) LIST_IS_EMPTY!)

 (T (F21_1 L F 1))

)

)

пример

(F21 ‘(-10 3 A P 4 -3 2 6 S) ‘MINUSP)  => (1 6)

 (F21 ‘(-10 3 A P 4 -3 2 6 S) ‘PLUSP)   => (2 5 7 8)

(F21 ‘(-10 3 A P 4 -3 2 6 S) ‘SYMBOLP)  => (3 4 9)

  1.  Задан линейный числовой список.  Сформировать список  сумм подмножеств элементов исходного списка таким образом, что на первом месте должна стоять сумма всех элементов списка,  на втором – сумма элементов без первого, на третьем - сумма элементов без первых двух и т.д.

(DEFUN F22 (L)

(COND ((NOT (LISTP L)) ERROR!_WRONG_LIST_ARGUMENT!)

((NULL L) LIST_IS_EMPTY!)

 (T (MAPLIST '(LAMBDA(L) (APPLY + L)) L))

)

)

пример

(F22 ‘(1 1 1 1 1 1 1))  => (7 6 5 4 3 2 1)

(F22 ‘(1 2 3 4 5 6 7))  => (28 27 25 22 18 13 7)

  1.  Удалить из исходного линейного списка все вхождения заданного элемента.

(DEFUN F23 (L X)

(COND ((NOT (ATOM X)) ERROR!_WRONG_ARGUMENT!)

((NOT (LISTP L)) ERROR!_WRONG_LIST_ARGUMENT!)

((NULL L) LIST_IS_EMPTY!)

(T  (MAPCON '(LAMBDA (L)

(IF (EQ (CAR L) X)

NIL

(LIST (CAR L))

)

)

L)

)

)

)

пример

(F23 ‘(A C X C A B Y X D A) X)   => (A C C A B Y D A)

(F23 ‘(A C X C A B Y X D A) A)   => (C X C B Y X D)

(F23 ‘(0 1 0 0 1 1 1 0 0) 1)   => (0 0 0 0 0)

  1.  Оставить в исходном линейном списке не более одного вхождения каждого элемента.

(DEFUN F24 (L)

(COND ((NOT (LISTP L)) "WRONG LIST ARGUMENT")

 (T  (MAPCON '(LAMBDA (L)

(IF (MEMBER (CAR L) (CDR L))

NIL

(LIST (CAR L))

)

)

     L)

)

)

)

пример

(F24 ‘(A C X C A B Y X D A))   => (A C X B Y D)

(F24 ‘(0 1 0 0 1 1 1 0 0))   => (0 1)

  1.  Даны два исходных списка одинакового размера. Сформировать из неравных друг другу элементов с одинаковыми порядковыми номерами точечные пары, объединив их в один результирующий список.

(DEFUN F25 (L1 L2)

(COND ((OR (NOT (LISTP L1)) (NOT (LISTP L2))) ERROR!_WRONG_LIST_ARGUMENT!)

((OR (NULL L1) (NULL L2)) ERROR!_LIST_IS_EMPTY!)

((NOT (= (LENGTH L1) (LENGTH L2))) ERROR!_DIFFERENT_LENGTHS!)

(T  (MAPCAN '(LAMBDA (L1 L2)

(IF (AND (ATOM L1) (ATOM L1) (Not (EQ L1 L2)))

(LIST (CONS L1 L2))

NIL

)

)

L1 L2)

)

)

)

пример

(F25 ‘(A B C D 2 F) ‘(A C X 3 6 F))  => ((B . C) (C . X) (D . 3) (2 . 6))

(F25 ‘(A B C D 2 F) ‘(A C X 3))   => ERROR!_DIFFERENT_LENGTHS!

Входной  файл  на внешнем носителе содержит исходные данные в виде множества допустимых в ЛИСП структур данных.  Рассортировать его  и записать на внешний носитель в виде четырех файлов, каждый из которых содержит либо  числовые  атомы,  либо  символьные атомы, либо точечные пары, либо списки.

(DEFUN SORT (FileName File1 File2 File3 File4)

(SETQ F   (OPEN-INPUT-FILE FileName))

(SETQ F1 (OPEN-OUTPUT-FILE File1))

(SETQ F2 (OPEN-OUTPUT-FILE File2))

(SETQ F3 (OPEN-OUTPUT-FILE File3))

(SETQ F4 (OPEN-OUTPUT-FILE File4))

(IF (NOT (EQ NIL F))

 (LOOP

  

  ((EQ NIL (SETQ X (READ F))) SORT_IS_FINISHED)

  (COND ((NUMBERP X) (WRITE X F1))

   ((LISTP X) (WRITE X F2))

   ;((EQ SYM (TYPE X)) (WRITE X F3))

   (T (WRITE X F4))

)

)

ERROR!_WRONG_FILE_NAME!

)

)


 

А также другие работы, которые могут Вас заинтересовать

11827. Указатели и ссылки. Имя массива как указатель. Динамические массивы 220.5 KB
  Лабораторная работа №7. Указатели и ссылки. Имя массива как указатель. Динамические массивы 1 Цель и порядок работы Цель работы изучить работу с указателями ссылками получить навыки программирования с использованием динамических массивов. Порядок выполнения ра...
11828. Лабораторная работа №8. Функции 175.5 KB
  Лабораторная работа №8. Функции 1 Цель и порядок работы Цель работы изучить возможности языка по организации функций получить практические навыки в составлении программ с их использованием. Порядок выполнения работы: ознакомиться с описанием лабораторной ...
11829. Отладка программ в интегрированной среде Microsoft Visual C++ 2008 189.5 KB
  Лабораторная работа №9. Отладка программ в интегрированной среде Microsoft Visual C 2008 1 Цель и порядок работы Цель работы изучить инструментальные средства и возможности отладки программ в интегрированной среде Microsoft Visual C 2008 Visual Studio 2008. Порядок выполнения работы...
11830. Типы данных, определяемые пользователем. Структуры и объединения 189.5 KB
  Лабораторная работа №10. Типы данных определяемые пользователем. Структуры и объединения 1 Цель и порядок работы Цель работы ознакомиться с типами данных определяемыми пользователем и их применением в процессе программирования. Порядок выполнения работы: ...
11831. Работа со строками в C++. Потоки ввода-вывода. Файловые операции 338.5 KB
  Лабораторная работа №11. Работа со строками в C. Потоки вводавывода. Файловые операции 1 Цель и порядок работы Цель работы ознакомиться с возможностями вводавывода языка C освоить основные операции работы со строками и файлами. Порядок выполнения работы: о...
11832. Перегрузка функций. Шаблоны функций 152.5 KB
  Лабораторная работа №12. Перегрузка функций. Шаблоны функций 1 Цель и порядок работы Цель работы ознакомиться с возможностью перегрузки функций и научиться применять полученные знания на практике. Научиться использовать шаблоны функции и функции с переменным количе...
11833. Модули. Многофайловые проекты 227 KB
  Лабораторная работа №13. Модули. Многофайловые проекты 1 Цель и порядок работы Цель работы ознакомиться с возможностью работы с многофайловыми проектами в среде разработки Visual Studio и научиться применять полученные знания при создании собственных модулей. Порядок...
11834. ВИЗНАЧЕННЯ КОЕФІЦІЄНТА ФІЛЬТРАЦІЇ ГРУНТУ 326.5 KB
  ВИЗНАЧЕННЯ КОЕФІЦІЄНТА ФІЛЬТРАЦІЇ ГРУНТУ Визначення коефіцієнта фільтрації грунту. Методичні вказівки до лабораторної роботи № 16 з дисциплін Гідравліка відкритих русел Гідрологія та гідрометрія Гідравліка гідрологія гідрометрія для студентів базових напрямів...
11835. Визначення коефіцієнта витрати при витіканні рідини через зовнішні насадки 546.5 KB
  Визначення коефіцієнта витрати при витіканні рідини через зовнішні насадки. Методичні вказівки до лабораторної роботи № 7 з дисциплін Технічна механіка рідин та газів Гідрогазодинаміка Гідравліка гідро та пневмоприводи для студентів базових напрямів Водні рес...