@@ -349,125 +349,6 @@ defmodule Enum do
349349 end
350350 end
351351
352- @ doc """
353- Returns true if the first collection is equal to the second, every element in
354- both collections is iterated through, as soon as an element differs, it
355- returns false.
356-
357- ## Examples
358-
359- iex> Enum.equal?([], [])
360- true
361- iex> Enum.equal?(1 .. 3, [1, 2, 3])
362- true
363- iex> Enum.equal?(1 .. 3, [])
364- false
365-
366- """
367- @ spec equal? ( t , t ) :: boolean
368- def equal? ( a , b ) when is_list ( a ) and is_list ( b ) do
369- a == b
370- end
371-
372- def equal? ( a , b ) when is_list ( a ) do
373- equal? ( b , a )
374- end
375-
376- def equal? ( a , b ) when is_list ( b ) do
377- case I . iterator ( a ) do
378- { _ , :stop } ->
379- b == [ ]
380-
381- { iterator , pointer } ->
382- do_equal? ( pointer , iterator , b )
383-
384- list ->
385- list == b
386- end
387- end
388-
389- def equal? ( a , b ) do
390- case { I . iterator ( a ) , I . iterator ( b ) } do
391- { { a_iterator , a_pointer } , { b_iterator , b_pointer } } ->
392- do_equal? ( a_pointer , a_iterator , b_pointer , b_iterator )
393-
394- { { iterator , pointer } , b } ->
395- do_equal? ( pointer , iterator , b )
396-
397- { a , { iterator , pointer } } ->
398- do_equal? ( pointer , iterator , a )
399-
400- { a , b } ->
401- a == b
402- end
403- end
404-
405- @ doc """
406- Returns true if the first collection is equal to the second, every element in
407- both collections is iterated through and compared with the passed function,
408- as soon as an element differs, it returns false.
409-
410- Please note that the first parameter passed to the compare function isn't
411- ensured to be an element from the first collection.
412-
413- ## Examples
414-
415- iex> Enum.equal?([], [], &1 === &2)
416- true
417- iex> Enum.equal?([1 .. 3], [[1, 2, 3]], Enum.equal?(&1, &2))
418- true
419- iex> Enum.equal?(1 .. 3, [1.0, 2.0, 3.0], &1 === &2)
420- false
421- iex> Enum.equal?(1 .. 3, [], &1 === &2)
422- false
423-
424- """
425- @ spec equal? ( t , t , ( ( term , term ) -> boolean ) ) :: boolean
426- def equal? ( [ ] , [ ] , _ ) do
427- true
428- end
429-
430- def equal? ( a , b , _ ) when is_list ( a ) and is_list ( b ) and a == [ ] or b == [ ] do
431- false
432- end
433-
434- def equal? ( a , b , fun ) when is_list ( a ) and is_list ( b ) do
435- do_equal_with? ( fun , a , b )
436- end
437-
438- def equal? ( a , b , fun ) when is_list ( a ) do
439- equal? ( b , a , fun )
440- end
441-
442- def equal? ( a , b , fun ) when is_list ( b ) do
443- case I . iterator ( a ) do
444- { _ , :stop } ->
445- b == [ ]
446-
447- { iterator , pointer } ->
448- do_equal_with? ( fun , pointer , iterator , b )
449-
450- list ->
451- do_equal_with? ( fun , list , b )
452- end
453- end
454-
455- def equal? ( a , b , fun ) do
456- case { I . iterator ( a ) , I . iterator ( b ) } do
457- { { a_iterator , a_pointer } , { b_iterator , b_pointer } } ->
458- do_equal_with? ( fun , a_pointer , a_iterator , b_pointer , b_iterator )
459-
460- { { iterator , pointer } , b } ->
461- do_equal_with? ( fun , pointer , iterator , b )
462-
463- { a , { iterator , pointer } } ->
464- do_equal_with? ( fun , pointer , iterator , a )
465-
466- { a , b } ->
467- do_equal_with? ( fun , a , b )
468- end
469- end
470-
471352 @ doc """
472353 Finds the element at the given index (zero-based).
473354 Returns `{ :ok, element }` if found, otherwise `:error`.
@@ -1424,113 +1305,6 @@ defmodule Enum do
14241305 [ ]
14251306 end
14261307
1427- ## equal?
1428-
1429- # iterator : iterator
1430- defp do_equal? ( :stop , _ , :stop , _ ) do
1431- true
1432- end
1433-
1434- defp do_equal? ( :stop , _ , _ , _ ) do
1435- false
1436- end
1437-
1438- defp do_equal? ( _ , _ , :stop , _ ) do
1439- false
1440- end
1441-
1442- defp do_equal? ( { a , _ } , _ , { b , _ } , _ ) when a != b do
1443- false
1444- end
1445-
1446- defp do_equal? ( { _ , a_next } , a_iterator , { _ , b_next } , b_iterator ) do
1447- do_equal? ( a_iterator . ( a_next ) , a_iterator , b_iterator . ( b_next ) , b_iterator )
1448- end
1449-
1450- # iterator : list
1451- defp do_equal? ( { _ , _ } , _ , [ ] ) do
1452- false
1453- end
1454-
1455- defp do_equal? ( :stop , _ , [ ] ) do
1456- true
1457- end
1458-
1459- defp do_equal? ( :stop , _ , _ ) do
1460- false
1461- end
1462-
1463- defp do_equal? ( { a , _ } , _ , [ b | _ ] ) when a != b do
1464- false
1465- end
1466-
1467- defp do_equal? ( { _ , a_next } , iterator , [ _ | b_next ] ) do
1468- do_equal? ( iterator . ( a_next ) , iterator , b_next )
1469- end
1470-
1471- # iterator : iterator
1472- defp do_equal_with? ( _ , :stop , _ , :stop , _ ) do
1473- true
1474- end
1475-
1476- defp do_equal_with? ( _ , :stop , _ , _ , _ ) do
1477- false
1478- end
1479-
1480- defp do_equal_with? ( _ , _ , _ , :stop , _ ) do
1481- false
1482- end
1483-
1484- defp do_equal_with? ( fun , { a , a_next } , a_iterator , { b , b_next } , b_iterator ) do
1485- if fun . ( a , b ) do
1486- do_equal_with? ( fun , a_iterator . ( a_next ) , a_iterator , b_iterator . ( b_next ) , b_iterator )
1487- else
1488- false
1489- end
1490- end
1491-
1492- # iterator : list
1493- defp do_equal_with? ( _ , :stop , _ , [ ] ) do
1494- true
1495- end
1496-
1497- defp do_equal_with? ( _ , :stop , _ , _ ) do
1498- false
1499- end
1500-
1501- defp do_equal_with? ( _ , { _ , _ } , _ , [ ] ) do
1502- false
1503- end
1504-
1505- defp do_equal_with? ( fun , { a , a_next } , iterator , [ b | b_next ] ) do
1506- if fun . ( a , b ) do
1507- do_equal_with? ( fun , iterator . ( a_next ) , iterator , b_next )
1508- else
1509- false
1510- end
1511- end
1512-
1513- # list : list
1514- defp do_equal_with? ( _ , [ ] , [ ] ) do
1515- true
1516- end
1517-
1518- defp do_equal_with? ( _ , [ ] , _ ) do
1519- false
1520- end
1521-
1522- defp do_equal_with? ( _ , _ , [ ] ) do
1523- false
1524- end
1525-
1526- defp do_equal_with? ( fun , [ a | a_next ] , [ b | b_next ] ) do
1527- if fun . ( a , b ) do
1528- do_equal_with? ( fun , a_next , b_next )
1529- else
1530- false
1531- end
1532- end
1533-
15341308 ## find
15351309
15361310 defp do_find ( [ h | t ] , ifnone , fun ) do
0 commit comments