Запутался со списком, нужна середина) - Lisp

Узнай цену своей работы

Формулировка задачи:

Всем привет! Немного затрудняюсь сделать( собственно вот задание: а) написать функцию, которая возвращает t, если первый и последний элементы списка равны, иначе - nil б) Определите функцию, которая меняет местами первый и последний элементы списка, оставляя остальные на своих местах, если элементы списка разные, иначе функция возвращает список без первого и последнего элементов. с первой справился, а вот во второй есть проблема, не могу сообразить как взять середину списка(тесть без первого и последнего) заранее благодарен! если можно, объясните мне дураку ) а вот мои наработки :
Листинг программы
  1. (defun srav (spis)
  2. (cond
  3. ((listp spis) (eq (car spis) (car (reverse spis))))
  4. )
  5. )
  6. (defun f2 (spis)
  7. (cond
  8. ((eq (srav spis)nil)(append (list(car (reverse spis))) (list (car spis))))
  9. )
  10.  
  11. )
Вроде бы разобрался сам, спасибо всем за внимание! Может кому пригодится решение
Листинг программы
  1. (defun srav (spis)
  2. (cond
  3. ((listp spis) (eq (car spis) (car (reverse spis))))
  4. )
  5. )
  6. (defun f2 (spis)
  7. (cond
  8. ((eq (srav spis)nil)(append (list(car (reverse spis))) (append (cdr (reverse(cdr spis))) (list (car spis)) )))
  9. (t (cdr (reverse (cdr (reverse spis)))))
  10. )
  11.  
  12. )

Решение задачи: «Запутался со списком, нужна середина)»

textual
Листинг программы
  1.  (equalp 'a 'b) =>  false
  2.  (equalp 'a 'a) =>  true
  3.  (equalp 3 3) =>  true
  4.  (equalp 3 3.0) =>  true
  5.  (equalp 3.0 3.0) =>  true
  6.  (equalp #c(3 -4) #c(3 -4)) =>  true
  7.  (equalp #c(3 -4.0) #c(3 -4)) =>  true
  8.  (equalp (cons 'a 'b) (cons 'a 'c)) =>  false
  9.  (equalp (cons 'a 'b) (cons 'a 'b)) =>  true
  10.  (equalp #\A #\A) =>  true
  11.  (equalp #\A #\a) =>  true
  12.  (equalp "Foo" "Foo") =>  true
  13.  (equalp "Foo" (copy-seq "Foo")) =>  true
  14.  (equalp "FOO" "foo") =>  true
  15.  (setq array1 (make-array 6 :element-type 'integer
  16.                             :initial-contents '(1 1 1 3 5 7)))
  17. =>  #(1 1 1 3 5 7)
  18.  (setq array2 (make-array 8 :element-type 'integer
  19.                             :initial-contents '(1 1 1 3 5 7 2 6)
  20.                             :fill-pointer 6))
  21. =>  #(1 1 1 3 5 7)
  22.  (equalp array1 array2) =>  true
  23.  (setq vector1 (vector 1 1 1 3 5 7)) =>  #(1 1 1 3 5 7)
  24.  (equalp array1 vector1) =>  true

Объяснение кода листинга программы

  1. (equalp 'a 'b) => false
  2. (equalp 'a 'a) => true
  3. (equalp 3 3) => true
  4. (equalp 3 3.0) => true
  5. (equalp 3.0 3.0) => true
  6. (equalp #c(3 -4) #c(3 -4)) => true
  7. (equalp #c(3 -4.0) #c(3 -4)) => true
  8. (equalp (cons 'a 'b) (cons 'a 'c)) => false
  9. (equalp (cons 'a 'b) (cons 'a 'b)) => true
  10. (equalp #\A #\A) => true
  11. (equalp #\A #\a) => true
  12. (equalp Foo Foo) => true
  13. (equalp Foo (copy-seq Foo)) => true
  14. (equalp FOO foo) => true
  15. (setq array1 (make-array 6 :element-type 'integer :initial-contents '(1 1 1 3 5 7))) => #(1 1 1 3 5 7)
  16. (setq array2 (make-array 8 :element-type 'integer :initial-contents '(1 1 1 3 5 7 2 6) :fill-pointer 6)) => #(1 1 1 3 5 7)
  17. (equalp array1 array2) => true
  18. (setq vector1 (vector 1 1 1 3 5 7)) => #(1 1 1 3 5 7)
  19. (equalp array1 vector1) => true

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы