     `(let [nor# ~x]
        (if nor# false (nor ~@next)))))
 
+(defmacro nor1
+     [& more]
+     `(not (or ~@more)))
+
 (defn impl 
   "Logical implication (phi -> psi)"
   [phi psi]
   (or (not phi) psi))
+
+; besser als Makro, q wird nicht ausgewertet, wenn p false ist
+(defmacro impl1
+  [p q]
+  `(if (not ~p) 
+     true
+     ~q))
 
 (defn nimpl 
   "Logical negated implication (!(phi -> psi))"

   ([x & next]
     (if x false (apply nor next))))

;;; macro ;;;
(defmacro nor
  "Logical negated or (!(phi | psi))"

   ([] true)
   ([x] true)
   ([x y]
     `(= ~x ~y))
   ([x y & more]
     `(let [y# ~y]
        (if (= ~x  y#) (equiv y# ~@more) false))))

(defn rimpl
  "Reverted logical implication (phi <- psi)"
