and、orはビット演算なんかで使うようなイメージでしたが、
emacs lispにおいては条件式っぽく使うことが可能です。
実際のところ
andは前から順繰りに実行して、全部あってれば最後の要素を返す。
(and (print 1) (print 2) (print 3)) ; 1 ; 2 ; 3 ; 3 (#o3, #x3, ?\C-c)
途中で負の値がでれば中断。要素も返さない
(and (print 1) nil (print 3)) ; 1 ; nil
一方、orは最初の真がでたらそこでオシマイ
(or (print 1) (print 2) (print 3)) ; 1 ; 1 (#o1, #x1, ?\C-a)
革命精神の不足から、私shuzo_kinoは点検を怠り、誤った知識を広めました。ここにその旨自己批判をすると共に(ry
最初、andの部分は全部正の条件だけで検証していました。
そのため、全部実行可能だったら末尾要素を返すものだと解釈していました。
初版へのコメントから間違いだった事がわかったので修正しておきます。