Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #|
- | Asg5Lisp.txt
- | By Vanessa Gerber (hpj766)
- |#
- ;; removeNILTop is passed a list and removes all NIL at the top level
- (defun removeNILTop (L)
- (COND ( (NULL L) NIL )
- ( (NULL (CAR L)) (removeNILTop(CDR L)) ) ;; if head is NIL, remove
- ( T ( CONS (CAR L) (removeNILTop(CDR L)) ) ) ;; else keep
- )
- )
- ;; removeNILMost is passed a list and removes NIL at any level
- (defun removeNILMost (L)
- (COND ( (NULL L) NIL )
- ( (NULL (CAR L)) (removeNILMost(CDR L)) ) ;; if top is NIL, remove
- ( (LISTP (CAR L)) ;; if list
- (CONS (removeNILMost(CAR L)) (removeNILMost(CDR L)))
- )
- ( T ( CONS (CAR L) (removeNILMost(CDR L)) ) ) ;; else keep
- )
- )
- ;; reverseTop() is passed a list and returns it in reverse
- (defun reverseTop (L)
- (COND ( (NULL L) NIL )
- ( ( NULL (CADR L) ) L ) ;; if last element, return that element
- (T (APPEND (reverseTop(CDR L)) (LIST (CAR L)) ) )
- )
- )
- ;; reverseAll() is passed a list and returns a reversed list all levels
- (defun reverseAll (L)
- (COND ( (NULL L) NIL )
- ( ( NULL (CADR L) ) L ) ;; if last element, return that element
- ( (LISTP (CAR L)) ;; if head is list, reverse that too
- (APPEND (reverseAll(CDR L)) (LIST (reverseAll(CAR L))) )
- )
- (T (APPEND (reverseAll(CDR L)) (LIST (CAR L)) ) )
- )
- )
- ;; palindrome() is passed a list and returns T if list is a palindrome at top lv
- (defun palindrome (L)
- ( COND ( (EQUAL (reverseTop L) L) T ) ;; if reverse is equal to list
- (T NIL)) ;; not a palindrome
- )
- ;; [ EXTRA CREDIT ]
- ;; removeNILAll() removes any resulting NIL except the single outermost
- (defun removeNILTop (L)
- (COND ( (NULL L) NIL )
- ( (LISTP (CAR L)) ;; if head is list, recurse
- (APPEND (removeNILAll (CAR L)) (removeNILAll (CDR L)))
- )
- ( (NULL (CAR L)) (removeNILAll(CDR L)) ) ;; if head is NIL, remove
- ( T ( CONS (CAR L) (removeNILAll(CDR L)) ) ) ;; else keep
- )
- )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement