Shammer's Philosophy

My private adversaria

Lisp の member-if 関数

昨日は member 関数をやったので、今日は似たような member-if 。これを ClozureCL で使おうとすると、

MEMBER-IF : (TEST LIST &KEY KEY)

と、シグネチャが出る。う〜ん、Lisp ではこの関数の定義の様子をなんと言うのだろうか。


member-if は、member と同じように書くとエラーになる。

(member-if 'a (list 'b 'c))
> Error: Undefined function A called with arguments (B) .
〜以下略〜

member-if は、最初に"TEST"に該当する引数がくる。これは、member 関数の例を考えると・・・こういうことだろうか。

(member-if #'numberp '(a b c 3))
(3)

1つ目の引数は、2つ目の引数に対して実行する関数だ。1つ目の関数が T を返した以降の要素がリストとして返される、というのが member-if 関数、というところか。