与えた条件を満たす候補
Posted feedbacks - Scheme
Schemeの解答がなかったので投稿
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | (use srfi-1)
(use util.match)
(use util.combinations)
(define (solve expr)
(define (op-apply expr stack)
(match expr
(()
(car stack))
(('not rest ...)
(op-apply rest (cons (not (car stack)) (cdr stack))))
((op 'not rest ...)
(op-apply (cons op rest) (list* (car stack) (not (cadr stack)) (cddr stack))))
(('and rest ...)
(op-apply rest (cons (and (car stack) (cadr stack)) (cddr stack))))
(('or rest ...)
(op-apply rest (cons (or (car stack) (cadr stack)) (cddr stack))))))
(filter (cut op-apply expr <>) (cartesian-product (make-list 4 '(#t #f)))))
|
手抜きをしてパラメータ(x1, x2, x3, x4)の個数が4個限定だったのを修正しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | (use srfi-1)
(use util.match)
(use util.combinations)
(define (solve expr)
(define (op-apply expr stack)
(match expr
(()
(car stack))
(('not rest ...)
(op-apply rest (cons (not (car stack)) (cdr stack))))
((op 'not rest ...)
(op-apply (cons op rest) (list* (car stack) (not (cadr stack)) (cddr stack))))
(('and rest ...)
(op-apply rest (cons (and (car stack) (cadr stack)) (cddr stack))))
(('or rest ...)
(op-apply rest (cons (or (car stack) (cadr stack)) (cddr stack))))))
(filter (cut op-apply expr <>)
(cartesian-product (make-list
(+ (length (filter (cut memq <> '(and or)) expr)) 1)
'(#t #f)))))
|



にしお
#3399()
Rating0/0=0.00
元ネタの 充足可能性問題 - Wikipedia は、 同じリテラル(x1とかnot x2とか)が複数回出てくることを想定しているので、 今回の問題のようにそれぞれ別の変数でだと乗法標準形 - Wikipediaにした場合に、答えが…と色々悩みどころでした。
[ reply ]