私は互いに補完する2つの閉包を持っています。私はもう一方の面で定義したいと思います。例えば、別の閉包に関して閉包を定義する
(defun more-than (v) #'(lambda (x) (> x v)))
CL-USER> (funcall (more-than 5) 7)
T
CL-USER> (funcall (more-than 5) 3)
NIL
に続き、我々は上記のクロージャを使用して、その補数、less-than-or-equal
を定義したいと我々は機能more-than
が定義されていることを言うことができます。これは私の試みが今まで働いていないので、上記の閉鎖ほど簡単ではないようです。誰かが解決策を指摘することができますか、これが共通のパターンであるかどうかを教えてください(つまり、最初のクロージャとは独立した第2のクロージャを定義する代わりに)。ここで
は、私がコメントで述べたように、あなたは機能の補完を行うことCOMPLEMENT
を使用することができます
;; compile time error
(defun less-than-or-equal (v)
#'(lambda (x) #'(not (more-than v))))
;; returns nil for every comparison
(defun less-than-or-equal (v)
#'(lambda (x) (not (more-than v))))
どのように実装しようとしましたか?単純な解決策は動作するはずです: '(defun less-than-equal(v)(補数(more-v)))' – jkiiski
ありがとう!私は '補完 'を見逃してしまって、誤って元のクロージャの定義を模倣しようとしました!それにもかかわらず、私はこれが「not」を使って達成できるのだろうかと思います。 –