let list_map (_func: 'a -> 'a) (_list: 'a list) : 'a list =
let rec list_map' list =
match list with
| [] ->
[]
| head :: tail ->
let tail' =
list_map' tail
and head' =
_func head
in
if tail == tail'
&&
head == head'
then
list
else
head' :: tail'
in
list_map' _list