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

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

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

Всем привет! Немного затрудняюсь сделать( собственно вот задание: а) написать функцию, которая возвращает t, если первый и последний элементы списка равны, иначе - nil б) Определите функцию, которая меняет местами первый и последний элементы списка, оставляя остальные на своих местах, если элементы списка разные, иначе функция возвращает список без первого и последнего элементов. с первой справился, а вот во второй есть проблема, не могу сообразить как взять середину списка(тесть без первого и последнего) заранее благодарен! если можно, объясните мне дураку ) а вот мои наработки :
(defun srav (spis)
  (cond
   ((listp spis) (eq (car spis) (car (reverse spis))))
   )
)
(defun f2 (spis)
  (cond
   ((eq (srav spis)nil)(append (list(car (reverse spis))) (list (car spis))))
   )

)
Вроде бы разобрался сам, спасибо всем за внимание! Может кому пригодится решение
(defun srav (spis)
  (cond
   ((listp spis) (eq (car spis) (car (reverse spis))))
   )
)
(defun f2 (spis)
  (cond
   ((eq (srav spis)nil)(append (list(car (reverse spis))) (append (cdr (reverse(cdr spis))) (list (car spis)) )))
   (t (cdr (reverse (cdr (reverse spis)))))
   )

)

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

textual
Листинг программы
 (equalp 'a 'b) =>  false
 (equalp 'a 'a) =>  true
 (equalp 3 3) =>  true
 (equalp 3 3.0) =>  true
 (equalp 3.0 3.0) =>  true
 (equalp #c(3 -4) #c(3 -4)) =>  true
 (equalp #c(3 -4.0) #c(3 -4)) =>  true
 (equalp (cons 'a 'b) (cons 'a 'c)) =>  false
 (equalp (cons 'a 'b) (cons 'a 'b)) =>  true
 (equalp #\A #\A) =>  true
 (equalp #\A #\a) =>  true
 (equalp "Foo" "Foo") =>  true
 (equalp "Foo" (copy-seq "Foo")) =>  true
 (equalp "FOO" "foo") =>  true
 (setq array1 (make-array 6 :element-type 'integer
                            :initial-contents '(1 1 1 3 5 7))) 
=>  #(1 1 1 3 5 7)
 (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)
 (equalp array1 array2) =>  true
 (setq vector1 (vector 1 1 1 3 5 7)) =>  #(1 1 1 3 5 7)
 (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
Похожие ответы