Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 23

Работа со списком

28.03.2013, 13:36. Показов 1445. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Работа представляет собой несколько дополнительных функций и одну основную (menu), средствами которой реализована работа со списком. Меню реализует 3 пункта для работы со списком и 1 для выхода из программы.

-удаление элементов из списка, которые больше среднего арифметического;
-замена значений элементов с четными номерами на значение максимального отрицательного элемента;
-обращение списка.

нужно сделать через case или cond. Помогите пожалуйста. Максимально простой вариант.
Буду крайне благодарен.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.03.2013, 13:36
Ответы с готовыми решениями:

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

Работа со списком
Дан список состоящий и последовательности a(1),a(2),...,a(n). Определить максимальное количество подряд идущих положительных элементов...

Работа со списком
Дан список С, что состоит из записей: первое поле - буква, второе поле - адрес следующего элемента. Составить программу для проверки...

11
 Аватар для _sg
4706 / 4401 / 380
Регистрация: 12.05.2012
Сообщений: 3,100
28.03.2013, 14:22
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(defun del-over-aver (w)
  (over-aver w (/ (sum w) (len w))))
 
(defun len (w)
  (if w (1+ (len (cdr w))) 0))
 
(defun sum (w)
  (if w (+ (car w) (sum (cdr w))) 0))
 
(defun over-aver (w n)
  (cond ((null w) nil)
        ((> (car w) n) (over-aver (cdr w) n))
        ((cons (car w)(over-aver (cdr w) n)))))
 
> (del-over-aver '(1 2 3 4 5 6 7))
(1 2 3 4)
Lisp
1
2
3
4
5
6
7
8
9
10
11
(defun eventh-max-minusp (w)
  (eventh w (max-minusp w)))
 
(defun eventh (w n)
  (when (cdr w) (cons (car w) (cons n (eventh (cddr w) n)))))
 
(defun max-minusp (w)
  (reduce #'max (remove-if-not #'minusp w)))
 
> (eventh-max-minusp '(-2 -1 0 1 2 3))
(-2 -1 0 -1 2 -1)
Lisp
1
2
3
4
5
(defun _reverse (w &optional ac)
  (if w (_reverse (cdr w) (cons (car w) ac)) ac))
 
> (_reverse '(1 2 3 4 5))
(5 4 3 2 1)
1
15 / 15 / 0
Регистрация: 14.03.2013
Сообщений: 77
28.03.2013, 14:49
он имел ввиду что это все должно быть в одной проге с возможностью выбора операции

Добавлено через 18 секунд
я видел такой код, жаль что не сохранил себе
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
28.03.2013, 16:40
О, надо писать REPL и DSL-чик. Я не, не буду. Задание Леона, пусть сам и пишет.
0
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 23
28.03.2013, 17:36  [ТС]
helter, ну напишите пожайлуста хотя бы как правильно с cond и case правильно работать
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
28.03.2013, 17:49
Лучший ответ Сообщение было отмечено как решение

Решение

Меню, так меню:

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
//
//  Программа отображения диалога _Dlg_
//
 
(prog nil
 
      (try (dlgDestroy '_Dlg_) except Nil)
 
      (dlgCreate '_Dlg_ 695 200 "Работа со списками" &H8000000F)
 
      (dlgAddControl '_Dlg_ '_LBL_1 _LABEL 15 21 109 20 '("Tahoma" 8,25 1 0 0) "Исходный список:" 0 &H80000012 &H8000000F)
 
      (dlgAddControl '_Dlg_ '_TXT_1 _TEXT 142 11 531 33 '("Tahoma" 16 1 0 0) "" 0 &H80000008 &H80000005)
 
      (dlgAddControl '_Dlg_ '_BUT_1 _BUTTON 15 54 158 50 '("Tahoma" 8,25 1 0 0) "Удаление больших ср.ар.")
 
      (dlgAddControl '_Dlg_ '_BUT_2 _BUTTON 183 54 158 50 '("Tahoma" 8,25 1 0 0) "Замена четных на макс отр.")
 
      (dlgAddControl '_Dlg_ '_BUT_3 _BUTTON 352 54 158 50 '("Tahoma" 8,25 1 0 0) "Обращение списка")
 
      (dlgAddControl '_Dlg_ '_TXT_2 _TEXT 144 119 534 33 '("Tahoma" 16 1 0 0) "" 0 &H80000008 &H80000005)
 
      (dlgAddControl '_Dlg_ '_LBL_2 _LABEL 16 126 116 21 '("Tahoma" 8,25 1 0 0) "Результат" 0 &H80000012 &H8000000F)
 
      (dlgAddControl '_Dlg_ '_BUT_4 _BUTTON 519 54 158 50 '("Tahoma" 8,25 1 0 0) "Завершить")
 
      //
      // Пролог загрузки диалога _DLG_
      //
 
      (Prog () 
 
         (defun p1 (lst)
           (let* ((n (length lst))
                  (s (apply '+ lst))
                  (avg (/ s n)))
                 (remove-if #'(lambda (x) (> x avg)) lst)))
 
         (defun max-neg (lst)
           (apply 'max (remove-if #'(lambda (x) (>= x 0)) lst)))
 
         (defun p2 (lst)
           (let ((mn (max-neg lst)))
                (iter (for i in lst) (collecting (if (evenp i) mn i)))))
            
         (defun p3 (lst)
           (reverse lst))  
 
      )
 
      //
      // Обработчик события CLICK для кнопки _BUT_1
      //
 
      (defun _BUT_1_Click  Nil 
 
        (try
         (dlgPutText '_TXT_2  (output (p1 (input (dlgGetText '_txt_1)))))
        except
         (say "Ошибка! Проверьте ввод."))  
 
      )
 
      //
      //   Назначение процедуры-события _BUT_1_Click  контролу _BUT_1
      //
 
      (dlgSetEvent '_BUT_1 '_BUT_1_Click )
 
      //
      // Обработчик события CLICK для кнопки _BUT_2
      //
 
      (defun _BUT_2_Click  Nil 
 
        (try
         (dlgPutText '_TXT_2  (output (p2 (input (dlgGetText '_txt_1)))))
        except
         (say "Ошибка! Проверьте ввод."))  
 
      )
 
      //
      //   Назначение процедуры-события _BUT_2_Click  контролу _BUT_2
      //
 
      (dlgSetEvent '_BUT_2 '_BUT_2_Click )
 
      //
      // Обработчик события CLICK для кнопки _BUT_3
      //
 
      (defun _BUT_3_Click  Nil 
 
        (try
         (dlgPutText '_TXT_2  (output (p3 (input (dlgGetText '_txt_1)))))
        except
         (say "Ошибка! Проверьте ввод."))  
 
      )
 
      //
      //   Назначение процедуры-события _BUT_3_Click  контролу _BUT_3
      //
 
      (dlgSetEvent '_BUT_3 '_BUT_3_Click )
 
      //
      // Обработчик события CLICK для кнопки _BUT_4
      //
 
      (defun _BUT_4_Click  Nil 
 
         (say "Пока...")
         (dlgHide '_dlg_)
         (dlgDestroy '_dlg_) 
 
      )
 
      //
      //   Назначение процедуры-события _BUT_4_Click  контролу _BUT_4
      //
 
      (dlgSetEvent '_BUT_4 '_BUT_4_Click )
 
      //
      //   Отображение диалога _Dlg_
      //
 
      (dlgShow '_Dlg_)
)
А ниже - картинки:
Миниатюры
Работа со списком   Работа со списком   Работа со списком  

3
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 23
28.03.2013, 17:54  [ТС]
_sg, А что такое "ac" в третей проге?
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
28.03.2013, 17:58
cond - обычный оператор множественного выбора. Синтаксис, как обычно, простейший: сплошные S-выражения:
Lisp
1
2
3
4
(cond (условие1 формы1)
    ...
    (условиеn формыn)
    (t формы-иначе))
Возвращает значение последней вычисленной формы.

Условия проверяются сверху вниз, пока не попадётся истинное. Принято в качестве последнего условия ставить истину t, чтобы одна ветка наверняка выполнилась бы. Кстати, в hyperspec есть пример, похожий на то, что вам надо.

С другой стороны, хотел обратить ваше внимание, что традиционная форма взаимодействия человека с Лиспом - REPL, то есть read-evaluate-print-loop. Его несложно реализовать. Было бы интересней, если бы пользователь вашей программы вводил команды (возможно, некоторого DSL - Domain Specific Language), а не просто цыфорки.

Пример написания простого REPLа есть в нескучной книге Land of Lisp.
0
15 / 15 / 0
Регистрация: 14.03.2013
Сообщений: 77
28.03.2013, 18:00
Catstail, вы просто гений в лиспе
0
4528 / 3522 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
28.03.2013, 18:01
Catstail, зачотно! А что это за библиотека? (Эх, мне бы тоже собраться - могу с LTK запилить.)
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
28.03.2013, 18:05
Цитата Сообщение от ruslan4664 Посмотреть сообщение
гений в лиспе
- явное преувеличение...

Цитата Сообщение от helter Посмотреть сообщение
А что это за библиотека?
- это HomeLisp (моя самоделка...) Подробнее здесь
1
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 23
28.03.2013, 18:50  [ТС]
Вот программа но сделана немного по другому, основываясь на программах _sg
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
(defun _reverse (w &optional ac)
  (if w (_reverse (cdr w) (cons (car w) ac)) ac))
 
(defun eventh-max-minusp (w)
  (eventh w (max-minusp w)))
 (defun eventh (w n)
  (when (cdr w) (cons (car w) (cons n (eventh (cddr w) n)))))
 (defun max-minusp (w)
  (reduce #'max (remove-if-not #'minusp w)))
 
(defun del-over-aver (w)
  (over-aver w (/ (sum w) (len w))))
 (defun len (w)
  (if w (1+ (len (cdr w))) 0))
 (defun sum (w)
  (if w (+ (car w) (sum (cdr w))) 0))
 (defun over-aver (w n)
  (cond ((null w) nil)
        ((> (car w) n) (over-aver (cdr w) n))
        ((cons (car w)(over-aver (cdr w) n)))))
 
(defun menu ()
(print "Список:")(print list)
(print>)
(print "МЕНЮ:")
(print "1 - Удаление элементов из списка, которые больше среднего арифметического")
(print "2 - Замена значений элементов с четными номерами на значение максимального отрицательного элемента")
(print "3 - Обращение списка")
(print>)
(set 'A (read))
(cond
 
((EQ A 1) (set 'list(del-over-aver del-over-aver)) (menu))
 
((EQ A 2) (set 'list(eventh-max-minusp eventh-max-minusp)) (menu))
 
((EQ A 3) (set 'list(_reverse _reverse)) (menu))
 
(T (menu)) ))
(set 'del-over-aver '(1 2 3 4 5 6 7))
(set 'eventh-max-minusp '(-2 -1 0 1 2 3))
(set '_reverse '(1 2 3 4 5))
(menu)
Мне помогли с реализацией Cond через внутреннее меню(надеюсь правильно сказал)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.03.2013, 18:50
Помогаю со студенческими работами здесь

Работа со списком
Имеется класс Tovar, в котором есть поля: название, страна, объем и цена Class Tovar { public string _name; ...

Работа со списком
Привет, сообщество! Имеется следующая задача. Дан некоторый список L. Необходимо перед каждым вхождением числа Y добавить число X. ...

работа со списком
Добрый день! Помогите с такой проблемой! Приведу пример. Есть форма на ней кнопки переходов, при нажатии на первую, открывается форма в...

Работа со списком
Помогите пожалуйста с задачей. Что не так? Задача звучит так: "Используйте представление последовательности строк в виде линейного...

Работа со списком
Удалить из списка первое вхождение заданного элемента на верхнем уровне не могу понять что значит на верхнем уровне


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru