File 2576-stdlib-Add-function-lists-search-2.patch of Package erlang

From 5c7209c2874849a5a7339e23fdbd9aed1bb935b2 Mon Sep 17 00:00:00 2001
From: Hans Bolinder <hasse@erlang.org>
Date: Tue, 27 Feb 2018 15:42:52 +0100
Subject: [PATCH] stdlib: Add function lists:search/2

This is essentially PR 102, https://github.com/erlang/otp/pull/102.

The OTP Technical Board decided to change the name of the function to
search/2.
---
 lib/stdlib/doc/src/lists.xml    | 14 +++++++++++++-
 lib/stdlib/src/lists.erl        | 19 ++++++++++++++++---
 3 files changed, 46 insertions(+), 7 deletions(-)

diff --git a/lib/stdlib/doc/src/lists.xml b/lib/stdlib/doc/src/lists.xml
index 7efafedc82..c3d5d7e07a 100644
--- a/lib/stdlib/doc/src/lists.xml
+++ b/lib/stdlib/doc/src/lists.xml
@@ -4,7 +4,7 @@
 <erlref>
   <header>
     <copyright>
-      <year>1996</year><year>2017</year>
+      <year>1996</year><year>2018</year>
       <holder>Ericsson AB. All Rights Reserved.</holder>
     </copyright>
     <legalnotice>
@@ -770,6 +770,18 @@ length(lists:seq(From, To, Incr)) =:= (To - From + Incr) div Incr</code>
       </desc>
     </func>
 
+    <func>
+      <name name="search" arity="2"/>
+      <fsummary>Find the first element that satisfies a predicate.</fsummary>
+      <desc>
+        <p>If there is a <c><anno>Value</anno></c> in <c><anno>List</anno></c>
+          such that <c><anno>Pred</anno>(<anno>Value</anno>)</c> returns
+          <c>true</c>, returns <c>{value, <anno>Value</anno>}</c>
+          for the first such <c><anno>Value</anno></c>,
+          otherwise returns <c>false</c>.</p>
+      </desc>
+    </func>
+
     <func>
       <name name="splitwith" arity="2"/>
       <fsummary>Split a list into two lists based on a predicate.</fsummary>
diff --git a/lib/stdlib/src/lists.erl b/lib/stdlib/src/lists.erl
index af9d63ddd6..06c90c0280 100644
--- a/lib/stdlib/src/lists.erl
+++ b/lib/stdlib/src/lists.erl
@@ -1,7 +1,7 @@
 %%
 %% %CopyrightBegin%
 %%
-%% Copyright Ericsson AB 1996-2016. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2018. All Rights Reserved.
 %%
 %% Licensed under the Apache License, Version 2.0 (the "License");
 %% you may not use this file except in compliance with the License.
@@ -38,8 +38,8 @@
 
 -export([all/2,any/2,map/2,flatmap/2,foldl/3,foldr/3,filter/2,
 	 partition/2,zf/2,filtermap/2,
-	 mapfoldl/3,mapfoldr/3,foreach/2,takewhile/2,dropwhile/2,splitwith/2,
-	 split/2,
+	 mapfoldl/3,mapfoldr/3,foreach/2,takewhile/2,dropwhile/2,
+         search/2, splitwith/2,split/2,
 	 join/2]).
 
 %%% BIFs
@@ -1399,6 +1399,19 @@ dropwhile(Pred, [Hd|Tail]=Rest) ->
     end;
 dropwhile(Pred, []) when is_function(Pred, 1) -> [].
 
+-spec search(Pred, List) -> {value, Value} | false when
+      Pred :: fun((T) -> boolean()),
+      List :: [T],
+      Value :: T.
+
+search(Pred, [Hd|Tail]) ->
+    case Pred(Hd) of
+        true -> {value, Hd};
+        false -> search(Pred, Tail)
+    end;
+search(Pred, []) when is_function(Pred, 1) ->
+    false.
+
 -spec splitwith(Pred, List) -> {List1, List2} when
       Pred :: fun((T) -> boolean()),
       List :: [T],
-- 
2.16.3

openSUSE Build Service is sponsored by