Advertisement
vdizzle

Untitled

Apr 3rd, 2021
674
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 1.99 KB | None | 0 0
  1. #|
  2.  | Asg5Lisp.txt
  3.  | By Vanessa Gerber (hpj766)
  4.  |#
  5.  
  6. ;; removeNILTop is passed a list and removes all NIL at the top level
  7. (defun removeNILTop (L)
  8.    (COND ( (NULL L) NIL )
  9.          ( (NULL (CAR L)) (removeNILTop(CDR L)) ) ;; if head is NIL, remove
  10.          ( T   ( CONS (CAR L) (removeNILTop(CDR L)) ) ) ;; else keep
  11.    )
  12. )
  13.  
  14. ;; removeNILMost is passed a list and removes NIL at any level
  15. (defun removeNILMost (L)
  16.    (COND ( (NULL L) NIL )
  17.          ( (NULL (CAR L)) (removeNILMost(CDR L)) ) ;; if top is NIL, remove
  18.          ( (LISTP (CAR L)) ;; if list
  19.             (CONS (removeNILMost(CAR L)) (removeNILMost(CDR L)))
  20.          )
  21.          ( T   ( CONS (CAR L) (removeNILMost(CDR L)) ) ) ;; else keep
  22.    )
  23. )
  24.  
  25. ;; reverseTop() is passed a list and returns it in reverse
  26. (defun reverseTop (L)
  27.    (COND ( (NULL L) NIL )
  28.       ( ( NULL (CADR L) ) L ) ;; if last element, return that element
  29.       (T    (APPEND (reverseTop(CDR L)) (LIST (CAR L)) ) )
  30.    )
  31. )
  32.  
  33. ;; reverseAll() is passed a list and returns a reversed list all levels
  34. (defun reverseAll (L)
  35.    (COND ( (NULL L) NIL )
  36.       ( ( NULL (CADR L) ) L ) ;; if last element, return that element
  37.       ( (LISTP (CAR L)) ;; if head is list, reverse that too
  38.          (APPEND (reverseAll(CDR L)) (LIST (reverseAll(CAR L))) )
  39.       )
  40.       (T    (APPEND (reverseAll(CDR L)) (LIST (CAR L)) ) )
  41.    )
  42. )
  43.  
  44. ;; palindrome() is passed a list and returns T if list is a palindrome at top lv
  45. (defun palindrome (L)
  46.    ( COND ( (EQUAL (reverseTop L) L) T ) ;; if reverse is equal to list
  47.    (T NIL)) ;; not a palindrome
  48. )
  49.  
  50. ;; [ EXTRA CREDIT ]
  51. ;; removeNILAll() removes any resulting NIL except the single outermost
  52. (defun removeNILTop (L)
  53.    (COND ( (NULL L) NIL )
  54.          ( (LISTP (CAR L)) ;; if head is list, recurse
  55.             (APPEND (removeNILAll (CAR L)) (removeNILAll (CDR L)))
  56.          )
  57.          ( (NULL (CAR L)) (removeNILAll(CDR L)) ) ;; if head is NIL, remove
  58.          ( T   ( CONS (CAR L) (removeNILAll(CDR L)) ) ) ;; else keep
  59.    )
  60. )
  61.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement