]> gerrit.simantics Code Review - simantics/platform.git/commitdiff
Added function elemIndex to SCL Prelude 59/1259/1
authorTuukka Lehtonen <tuukka.lehtonen@semantum.fi>
Thu, 23 Nov 2017 22:00:21 +0000 (00:00 +0200)
committerTuukka Lehtonen <tuukka.lehtonen@semantum.fi>
Thu, 23 Nov 2017 22:00:21 +0000 (00:00 +0200)
refs #7639

Change-Id: I927c447e0e5a1d6102172c8d99f36c4a79e9138a

bundles/org.simantics.scl.runtime/scl/Prelude.md
bundles/org.simantics.scl.runtime/scl/Prelude.scl

index 36b6023c95fe74908106c491cdeeaa3b052c2a95..df91f29d1fae13da2e0aa7e46964fc5294979037 100644 (file)
@@ -37,7 +37,7 @@
 
 ::class[Sequence]
 ::value[!, getList]
-::value[elem]
+::value[elem, elemIndex]
 ::value[filter, concatMap]
 ::value[foldl, foldl1, foldr]
 ::value[unfoldl, unfoldr]
index 6acbf924b1995ea0a082b29931d689bda66b53bb..c04cc8625aa0be2bceb1ab372f8f9fe5a7eca5c4 100644 (file)
@@ -2003,6 +2003,16 @@ elemMaybe el m = match m with
     Just el2 -> el == el2
     Nothing -> False
 
+"`elemIndex el lst` returns the index of the first element in the given list `lst` which is equal (by ==) to the query element, or Nothing if there is no such element."
+elemIndex :: a -> [a] -> Maybe Integer
+elemIndex el l = loop 0
+  where
+    len = length l
+    loop i | i < len = if el == l!i
+                       then Just i
+                       else loop (i+1)
+           | otherwise = Nothing
+
 """
 Computes a list that contains only elements that belongs to both input lists.
 """