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

Определить рекурсивную функцию, возвращающую последний элемент списка

22.12.2011, 07:06. Показов 5732. Ответов 8
Метки нет (Все метки)

Определить рекурсивную функцию, возвращающую последний элемент списка.

вот что сделано
Lisp
1
2
3
4
(defun last (xs)
  (if (null (cdr xs))
      xs
      (last (cdr xs))))
Но тут получается что последний элемент выводится ввиде списка, а нужно чтоб просто выводился элемент, помогите исправить, заранее спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2011, 07:06
Ответы с готовыми решениями:

Определить функцию, возвращающую последний элемент
Необходимо определить функцию, возвращающую последний элемент списка, содержащего не более 3-х...

Определить функцию, возвращающую последний элемент
(defun last1 (l) (cond((null l) nil) (t(null (cdr l) (car l)); если хвост списка пустой, то...

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

Определить рекурсивную функцию, возвращающую произведение двух целых положительных чисел
Определить рекурсивную функцию, возвращающую произведение двух целых положительных чисел...

8
Эксперт С++
5827 / 3478 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.12.2011, 08:56 2
aki295, вместо строки 3 напиши "(car xs)" (без кавычек)
1
0 / 0 / 0
Регистрация: 11.12.2011
Сообщений: 8
22.12.2011, 09:09  [ТС] 3
Спасибо!
0
6 / 7 / 4
Регистрация: 17.09.2013
Сообщений: 337
06.03.2016, 19:25 4
Цитата Сообщение от Nameless One Посмотреть сообщение
aki295, вместо строки 3 напиши "(car xs)" (без кавычек)
Но ведь в таком виде
Lisp
1
2
3
4
(defun last (xs)
(if (null (cdr xs))
(car xs)
(last (cdr xs))))
код в LispWorks не работает. Почему?
0
4520 / 3514 / 358
Регистрация: 12.03.2013
Сообщений: 6,037
06.03.2016, 19:35 5
Наверно, он не просто не работает (не виснет, система не падает), а выкидывает в дебаггер, где пишет осмысленные сообщения об ошибке?

В лиспе нельзя переопределять стандартные функции. last — стандартная функция.
0
6 / 7 / 4
Регистрация: 17.09.2013
Сообщений: 337
06.03.2016, 19:48 6
Спасибо получилось.
0
4684 / 4380 / 379
Регистрация: 12.05.2012
Сообщений: 3,087
06.03.2016, 20:16 7
как вариант:
Lisp
1
2
3
4
5
6
7
(defun lastt (w)
  (if (cdr w) (lastt (cdr w)) (car w)))
 
> (lastt '(a b c))
C
> (lastt '())
NIL
1
Эксперт С++
5827 / 3478 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
06.03.2016, 20:30 8
Closures to rescue!

Lisp
1
2
3
4
(defun my-last (lst)
  (reduce (lambda (x y)
            (return-from my-last x))
          lst :initial-value nil :from-end t))
3
Модератор
Эксперт функциональных языков программированияЭксперт Python
34343 / 19130 / 4022
Регистрация: 12.02.2012
Сообщений: 32,041
Записей в блоге: 13
06.03.2016, 21:37 9
Но здесь же нет рекурсии... Или я ошибаюсь? Тогда уж без затей:

Lisp
1
2
(defun last! (lst)
 (reduce (lambda (a x) x) lst))
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.03.2016, 21:37
Помогаю со студенческими работами здесь

Написать функцию, возвращающую максимальный элемент простого списка (HomeLisp)
Помогите решить еще одну задачку.

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

Написать рекурсивную функцию, увеличивающую n-й элемент списка на n
Предположим есть список чисел, нужно написать рекурсивную функцию, которая принимает список чисел и...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru