Запутался со списком, нужна середина) - 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
Объяснение кода листинга программы
- (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-seqFoo
)) => 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д