Advertisement
Disaster26

Untitled

Mar 21st, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 2.05 KB | None | 0 0
  1. #lang racket
  2.  
  3. (define (var? t)
  4.   (symbol? t))
  5.  
  6. (define (neg? t)
  7.   (and (list? t)
  8.        (= (length t) 2)
  9.        (eq? 'neg (car t))))
  10.  
  11. (define (conj? t)      
  12.   (and (list? t)
  13.        (= (length t) 3)
  14.        (eq? 'conj (car t))))
  15.  
  16. (define (disj? t)      
  17.   (and (list? t)
  18.        (= (length t) 3)
  19.        (eq? 'disj (car t))))
  20.  
  21. (define (prop? f)
  22.   (or (var? f)
  23.       (and (neg? f)
  24.            (prop? (neg-subf f)))
  25.       (and (disj? f)
  26.            (prop? (disj-left f))
  27.            (prop? (disj-right f)))
  28.       (and (conj? f)
  29.            (prop? (conj-left f))
  30.            (prop? (conj-right f)))))
  31.  
  32. (define (neg p)
  33.   (list 'neg p))
  34.  
  35. (define (conj p q)
  36.   (list 'conj p q))
  37.  
  38. (define (disj p q)
  39.   (list 'disj p q))
  40.  
  41. (define (neg-subf f)
  42.   (cadr f))
  43.  
  44. (define (disj-left f)
  45.   (cadr f))
  46.  
  47. (define (disj-right f)
  48.   (caddr f))
  49.  
  50. (define (conj-left f)
  51.   (cadr f))
  52.  
  53. (define (conj-right f)
  54.   (caddr f))
  55.  
  56. (define (free-vars f)
  57.   (define (fv f t)
  58.     (cond [(neg? f) (fv (neg-subf f) t)]
  59.           [(disj? f) (fv (disj-right f) (fv (disj-left f) t))]
  60.           [(conj? f) (fv (conj-right f) (fv (conj-left f) t))]
  61.           [else (remove-duplicates(append t (list f)))]))
  62.   (fv f null))
  63.  
  64. ; (free-vars (neg (disj 'a (conj 'a (neg (conj 'b (disj 9 11)))))))
  65.  
  66.  
  67.  
  68. ( define ( gen-vals xs )
  69. (if ( null? xs )
  70. ( list null )
  71. ( let*
  72.      (( vss ( gen-vals ( cdr xs ) ) )
  73. ( x ( car xs ) )
  74. ( vst ( map ( lambda ( vs ) ( cons ( list x true ) vs ) ) vss ) )
  75. ( vsf ( map ( lambda ( vs ) ( cons ( list x false ) vs ) ) vss ) ) )
  76. ( append vst vsf ) ) ) )
  77.  
  78. (define (eval-formula xs vals)
  79.   (define (val? x v)
  80.     (if (null? v)
  81.         (error "błąd")
  82.         (if (eq? (caar v) x)
  83.             (cadar v)
  84.             (val? x (cdr v)))))
  85.   (cond    
  86.          ((var? xs) (val? xs vals))
  87.          ((neg? xs) (not (eval-formula (neg-subf xs) vals)))
  88.          ((disj? xs) (or (eval-formula (disj-left xs) vals)(eval-formula(disj-right xs) vals)))
  89.          ((conj? xs) (and (eval-formula(conj-left xs) vals (eval-formula(conj-right xs) vals))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement