title: What do we call this (new?) higher-order function?
body: <p>I am trying to name what I think is a new idea for a higher-order function. To the important part, here is the code in Python and Haskell to demonstrate the concept, which will be explained afterward.</p>
  
  <p>Python:</p>
  
  <pre><code>&gt;&gt;&gt; def pleat(f, l):
         return map(lambda t: f(*t), zip(l, l[1:]))
  &gt;&gt;&gt; pleat(operator.add, [0, 1, 2, 3])
  [1, 3, 5]
  </code></pre>
  
  <p>Haskell:</p>
  
  <pre><code>Prelude&gt; let pleatWith f xs = zipWith f xs (drop 1 xs)
  Prelude&gt; pleatWith (+) [0,1,2,3]
  [1,3,5]
  </code></pre>
  
  <p>As you may be able to infer, the sequence is being iterated through, utilizing adjacent elements as the parameters for the function you pass it, projecting the results into a new sequence. So, has anyone seen the functionality we've created? Is this familiar at all to those in the functional community? If not, what do we name it?</p>
  
  <pre><code>---- Update ----
  </code></pre>
  
  <p><strong>Pleat</strong> wins!</p>
  
  <pre><code>Prelude&gt; let pleat xs = zip xs (drop 1 xs)
  Prelude&gt; pleat [1..4]
  [(1,2),(2,3),(3,4)]
  
  Prelude&gt; let pleatWith f xs = zipWith f xs (drop 1 xs)
  Prelude&gt; pleatWith (+) [1..4]
  [3,5,7]
  </code></pre>