More fun with APL

Note: see the rest of the series so far.

 

I stumbled across this post the other day and problem 2 seems like something I can easily do in APL since it essentially requires you to interleave two arrays.

The problem is:

Write a function that combines two lists by alternatingly taking elements. For example: given the two lists [a, b, c] and [1, 2, 3], the function should return [a, 1, b, 2, c, 3].

Here’s the solution I have come up with:

p2

since it uses both \omega (right argument) and \alpha (left argument) so it’s a dyadic function, let’s test it out:

'a' \ 'b' \ 'c' \ p2 \ 1 \ 2 \ 3

=> a 1 b 2 c 3

Here’s how it works:

  • concatenate the two arguments together, with the left argument first (\alpha, \omega)
  • reshape \rho the concatenated vector into 2 rows, so that you have effectively placed \alpha and \omega into a matrix, i.e.

a \ b \ c\\*    1 \ 2 \ 3

  • transpose that matrix

a \ 1\\*    b \ 2\\*    c \ 3

  • reshape \rho the transposed matrix into a vector, and that’s it!

 


Yan Cui

I’m an AWS Serverless Hero and the author of Production-Ready Serverless. I have run production workload at scale in AWS for nearly 10 years and I have been an architect or principal engineer with a variety of industries ranging from banking, e-commerce, sports streaming to mobile gaming. I currently work as an independent consultant focused on AWS and serverless.

You can contact me via Email, Twitter and LinkedIn.

Hire me.