# リストに関数を適用して最初にnon-nilを返した値を得る方法

Date: 2020-05-26
URL: https://s.conao3.com/blog/2020/cec89c
Author: conao3 (Naoya Yamashita)

このような関数をさくっと使いたい。
3つのポイントがあり、「リストに関数を適用して」「最初にnon-nilが返ってきた」「その値を得る」ということ。

2つめのポイントまでなら `cl-find-if` がそのまま使える。
`cl-find-if` は「リストに関数を適用して」「最初にnon-nilが返ってきた」「元の値を得る」ことができる。

```emacs-lisp
(cl-find-if (lambda (elm) (when (<= 3 elm) (* elm elm))) '(1 2 3 4))
;;=> 3
```

私が欲しいのはこういう関数です。

```emacs-lisp
(defun first-value (fn lst)
  "Apply FN for LST and return first non-nil value."
  (funcall fn (cl-find-if fn lst)))
;;=> first-value

(first-value (lambda (elm) (when (<= 3 elm) (* elm elm))) '(1 2 3 4))
;;=> 9
```

Emacs-jpで聞いたところ、koshさんに `seq-some` を教えてもらいました。

```emacs-lisp
(seq-some (lambda (elm) (when (<= 3 elm) (* elm elm))) '(1 2 3 4))
;;=> 9
```

便利。
