@@ -759,6 +759,28 @@ defmodule Enum do
759
759
end
760
760
end
761
761
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
+
762
784
@ doc """
763
785
Partitions `collection` into two where the first one contains elements
764
786
for which `fun` returns a truthy value, and the second one -- for which `fun`
@@ -1549,6 +1571,20 @@ defmodule Enum do
1549
1571
{ :lists . reverse ( list_acc ) , acc }
1550
1572
end
1551
1573
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
+
1552
1588
## partition
1553
1589
1554
1590
defp do_partition ( [ h | t ] , fun , acc1 , acc2 ) do
0 commit comments