@@ -349,125 +349,6 @@ defmodule Enum do
349
349
end
350
350
end
351
351
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
-
471
352
@ doc """
472
353
Finds the element at the given index (zero-based).
473
354
Returns `{ :ok, element }` if found, otherwise `:error`.
@@ -1424,113 +1305,6 @@ defmodule Enum do
1424
1305
[ ]
1425
1306
end
1426
1307
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
-
1534
1308
## find
1535
1309
1536
1310
defp do_find ( [ h | t ] , ifnone , fun ) do
0 commit comments