1 / 1 / 0
Регистрация: 16.10.2009
Сообщений: 29
1

Определить первый атом в списке, а если такого в списке нет, вывести nil

17.09.2011, 16:02. Показов 1582. Ответов 11
Метки нет (Все метки)

Помогите с написанием функции на lisp. 1. Функция которая определяет первый атом в списке, а если такого в списке нет, выводит нил. 2.нерекурсивная функция которая вычисляет сумму цифр в данном списке. Очень нужна оперативная помощь.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.09.2011, 16:02
Ответы с готовыми решениями:

Найти первый отличный от NIL атом в произвольном списке
Помогите найти первый отличный от NIL атом в произвольном списке (общей рекурсией) ((() A) B C) –>...

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

В списке есть вложенные списки,если все числа во вложенном списке положительные,то вывести сумму этих чисел
есть список ,в нём вложенные подсписки,если во вложенном подсписке все элементы положительные то...

Программа, возвращающую список вида: первый элемент — атом, появляющийся в списке один раз, второй - два раза и т.д
Помогите пожалуйста!! Есть список атомов. Написать программу, возвращающую список вида: первый...

11
Эксперт С++
5820 / 3472 / 357
Регистрация: 08.02.2010
Сообщений: 7,448
18.09.2011, 04:43 2
Lisp
1
2
3
4
5
6
7
(defun head (list)
  (if list
      (car list)
      list))
 
(defun sum (list)
  (reduce #'+ list))
0
VH
424 / 253 / 22
Регистрация: 23.11.2010
Сообщений: 278
18.09.2011, 08:33 3
1.
Lisp
1
2
3
4
5
(defun F (L)
 (if L
  (if (atom (car L))
   (car L)
   (F (cdr L)))))
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
29630 / 16189 / 3233
Регистрация: 12.02.2012
Сообщений: 26,792
Записей в блоге: 5
19.01.2013, 22:31 4
Цитата Сообщение от iezuit Посмотреть сообщение
2.нерекурсивная функция которая вычисляет сумму цифр в данном списке. Очень нужна оперативная помощь.
оперативность, правда, невысока...
Lisp
1
2
3
4
5
6
7
8
(defun sum-list (lst &aux (s 0))
  (dolist (i lst s) (when (numberp i) (setq s (+ i s)))))
 
==> sum-list
 
(sum-list '(1 2 3 a b c 4 5 6))
 
==> 21
0
4541 / 4247 / 360
Регистрация: 12.05.2012
Сообщений: 2,987
20.01.2013, 00:44 5
Lisp
1
2
3
4
5
6
7
8
9
(defun lead-atom (w) 
  (cond ((null w) nil)
        ((atom (car w)) (car w)) 
        ((lead-atom (cdr w)))))
 
> (lead-atom '((a) ((b) c) d))
D
> (lead-atom '((a) ((b) c)))
NIL
Lisp
1
2
3
4
5
6
7
(defun lead-atom (w)
  (loop for a in w when (atom a) return a))
 
> (lead-atom '((a) ((b) c) d))
D
> (lead-atom '((a) ((b) c)))
NIL
Lisp
1
2
3
4
5
6
7
8
(defun lead-atom (w) (find-if #'atom w))
 
> (lead-atom '((a) ((b) c)))
NIL
> (lead-atom '((a) ((b) c) d))
D
> (lead-atom '((a) ((b) c) d e))
D
0
54 / 55 / 37
Регистрация: 06.02.2013
Сообщений: 255
Записей в блоге: 1
09.02.2013, 22:38 6
Цитата Сообщение от Catstail Посмотреть сообщение
оперативность, правда, невысока...
Lisp
1
2
3
4
5
6
7
8
(defun sum-list (lst &aux (s 0))
  (dolist (i lst s) (when (numberp i) (setq s (+ i s)))))
 
==> sum-list
 
(sum-list '(1 2 3 a b c 4 5 6))
 
==> 21
а на каком лиспе сделано? а то у меня в mulisp87 не выполняет данный код

Undefined Function Break: (DOLIST (I LST S) (WHEN (NUMBERP I) (SETQ S (+ I S))))
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
29630 / 16189 / 3233
Регистрация: 12.02.2012
Сообщений: 26,792
Записей в блоге: 5
10.02.2013, 10:46 7
Цитата Сообщение от Константин_2012 Посмотреть сообщение
а на каком лиспе сделано? а то у меня в mulisp87 не выполняет данный код
- это сделано в HomeLisp. Будет работать и в Common Lisp.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
29630 / 16189 / 3233
Регистрация: 12.02.2012
Сообщений: 26,792
Записей в блоге: 5
10.02.2013, 12:23 8
Вот решение для muLisp-87:

Lisp
1
2
3
4
5
6
(defun sum-list (lst)
  (setq s 0)
  (loop
     ((null lst) s)
     (cond ((numberp (car lst))  (setq s (+ s (car lst)))))
     (setq lst (cdr lst))))
1
Миниатюры
Определить первый атом в списке, а если такого в списке нет, вывести nil  
4541 / 4247 / 360
Регистрация: 12.05.2012
Сообщений: 2,987
10.02.2013, 12:29 9
Lisp
1
2
3
4
5
6
(defun sumx (w)
  (cond ((null w) 0)
        ((numberp (car w)) (+ (car w) (sumx (cdr w))))
        ((sumx (cdr w)))))
 
> (sumx '(54 gh 5 fd 7 9 12 -2 f))
Lisp
1
2
3
4
5
(defun sumx (w)
  (loop for a in w when (numberp a) sum a))
 
> (sumx '(54 gh 5 fd 7 9 12 -2 f))
85
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
29630 / 16189 / 3233
Регистрация: 12.02.2012
Сообщений: 26,792
Записей в блоге: 5
10.02.2013, 12:41 10
_sg, Э... Тут проблема в muLisp! Попробуйте запустить Ваши решения в muLisp87. Чтобы получить то, что я привел выше, мне понадобился почти час

Добавлено через 5 минут
В muLisp форма (любая) может иметь вид: ((условие) ...тело...) И все бы хорошо, но когда условная форма выполняется внутри loop, то первое же не Nil - условие просто разрывает цикл! Поэтому легко написать суммирование числового списка:

Lisp
1
2
3
4
5
6
(defun sum-list (lst)
  (setq s 0)
  (loop
     ((null lst) s)
     (setq s (+ s (car lst)))
     (setq lst (cdr lst))))
Но как только пишешь так:

Lisp
1
2
3
4
5
6
(defun sum-list (lst)
  (setq s 0)
  (loop
     ((null lst) s)
     ((numberp (car lst)) (setq s (+ s (car lst))))
     (setq lst (cdr lst))))
то получаешь первое число списка (а не сумму!). Хоть тресни!
0
4541 / 4247 / 360
Регистрация: 12.05.2012
Сообщений: 2,987
10.02.2013, 12:54 11
чем можно объяснить использование mulisp, какими преимуществами, привычкой преподавателя?

Добавлено через 2 минуты
Константин_2012 согласился использовать другой Лисп
0
54 / 55 / 37
Регистрация: 06.02.2013
Сообщений: 255
Записей в блоге: 1
11.02.2013, 03:20 12
Цитата Сообщение от _sg Посмотреть сообщение
чем можно объяснить использование mulisp, какими преимуществами, привычкой преподавателя?
именно так)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.02.2013, 03:20

Написать программу, возвращающую список вида: первый элемент — атом исходного списка, появляющийся в списке один раз (с
Есть список атомов. Написать программу, возвращающую список вида: первый элемент — атом исходного...

Рекурсия: вернуть значение T, если в заданном списке L имеется более N-подсписков и NIL в противном случае
Всем привет! Снова прошу помощи у знатоков HomeLisp. Нужно разработать функцию, которая принимает...

В поиске добавить код если нет такого значения в стринггрид то вывести ошибку такого значения нет, если находит то вывод
procedure TForm1.Button5Click(Sender: TObject); var i,j,k:integer;S:string; begin for i:=1 to...

Найти наименьший четный элемент массива (если такого нет, то вывести первый элемент)
В одномерном массиве из 40 элементов найти наименьший четный элемент массива. Если такого нет, то...


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

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

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