Python と Purple で条件に当てはまる最初の要素をリストから取得

Python: find first element in a sequence that matches a predicatePython でリスト(イテラブル)から条件に当てはまる最初の要素を取得する方法が、幾つか記載されています。 その中のベストアンサー的な方法のコード例が下記サイトに掲載されていました。

Pythonで Scalaの findのように条件にマッチする最初の要素をリストから取得する

下記はそのコード例の転載です(少しだけ変えています)。

lis = ['foo', 'hoge', 'bar']
next(itertools.ifilter(lambda x: len(x) >= 4, lis), None)
#=>  'hoge'

itertoolsのifilterは Python 3では廃止され、filterがそれに相当するものになっています。

# Python 3 動作版
lis = ['foo', 'hoge', 'bar']
next(filter(lambda x: len(x) >= 4, lis), None)
#=>  'hoge'

Purple で同様のことをするコードはこんな感じです。

(def lis '("foo" "hoge" "bar"))
(next (filter [>= (len _) 4] lis) None)
;=> "hoge"

"[]"(角括弧)を使って無名関数を簡潔に書くことができます。 この書き方は Arc からとってきました。

2014/03/06追記

Purple の仕様がかわりました。 defn が def 、def が val になったので、上記のコードは下記のようになります。

(val lis '("foo" "hoge" "bar"))
(next (filter [>= (len _) 4] lis) None)
;=> "hoge"

2014/05/30追記

また Purple の仕様が変わりました(だいぶ前に)。 今はこんな感じになります。

(val lis ["foo" "hoge" "bar"]) ; (val lis '("foo" "hoge" "bar"))でもOK
(next (filter |>= (len _) 4| lis) None)
;=> "hoge"