Function: mh-mairix-convert-to-sop*
mh-mairix-convert-to-sop* is a byte-compiled function defined in
mh-search.el.gz.
Signature
(mh-mairix-convert-to-sop* EXPR)
Documentation
Convert EXPR to sum of product form.
Source Code
;; Defined in /usr/src/emacs/lisp/mh-e/mh-search.el.gz
(defun mh-mairix-convert-to-sop* (expr)
"Convert EXPR to sum of product form."
(cond ((atom expr) `(or (and ,expr)))
((eq (car expr) 'or)
(cons 'or
(cl-loop for e in (mapcar #'mh-mairix-convert-to-sop* (cdr expr))
append (cdr e))))
((eq (car expr) 'and)
(let ((conjuncts (mapcar #'mh-mairix-convert-to-sop* (cdr expr)))
result next-factor)
(setq result (pop conjuncts))
(while conjuncts
(setq next-factor (pop conjuncts))
(setq result (let ((res ()))
(dolist (t1 (cdr result))
(dolist (t2 (cdr next-factor))
(push `(and ,@(cdr t1) ,@(cdr t2)) res)))
(cons 'or res))))
result))
((atom (cadr expr)) `(or (and ,expr)))
((eq (caadr expr) 'not) (mh-mairix-convert-to-sop* (cadadr expr)))
((eq (caadr expr) 'and) (mh-mairix-convert-to-sop*
`(or ,@(mapcar (lambda (x) `(not ,x))
(cdadr expr)))))
((eq (caadr expr) 'or) (mh-mairix-convert-to-sop*
`(and ,@(mapcar (lambda (x) `(not ,x))
(cdadr expr)))))
(t (error "Unreachable: %s" expr))))