@@ -759,6 +759,28 @@ defmodule Enum do
759759 end
760760 end
761761
762+ @ doc """
763+ Checks if the given `term` is included in the `collection`.
764+
765+ ## Examples
766+
767+ iex> Enum.member?(1 .. 3, 1)
768+ true
769+ iex> Enum.member?([1, 2, 3, 4], 10)
770+ false
771+
772+ """
773+ @ spec member? ( t , term ) :: boolean
774+ def member? ( collection , term ) do
775+ case I . iterator ( collection ) do
776+ { iterator , pointer } ->
777+ do_member? ( pointer , iterator , term )
778+
779+ list when is_list ( list ) ->
780+ List . member? ( list , term )
781+ end
782+ end
783+
762784 @ doc """
763785 Partitions `collection` into two where the first one contains elements
764786 for which `fun` returns a truthy value, and the second one -- for which `fun`
@@ -1549,6 +1571,20 @@ defmodule Enum do
15491571 { :lists . reverse ( list_acc ) , acc }
15501572 end
15511573
1574+ ## member?
1575+
1576+ def do_member? ( :stop , _ , _ ) do
1577+ false
1578+ end
1579+
1580+ def do_member? ( { h , _ } , _ , term ) when h == term do
1581+ true
1582+ end
1583+
1584+ def do_member? ( { h , next } , iterator , term ) do
1585+ do_member? ( iterator . ( next ) , iterator , term )
1586+ end
1587+
15521588 ## partition
15531589
15541590 defp do_partition ( [ h | t ] , fun , acc1 , acc2 ) do
0 commit comments