I'll go through an example step-by-step, and hopefully it will make things clearer. First let me establish the following line numbers:
1. cut [] = ([],[])
2. cut (x:[]) = ([x],[])
3. cut (x:y:l) = let (xs,ys) = cut l
in (x:xs,y:ys)
Using the following call as an example:
cut [0,1,2]
This matches the clause of line the 3. because the list has at least 2 elements. Therefore x = 0, y = 1 and l = [2]. So it evaluates to the following:
let (xs,ys) = cut [2]
in (0:xs, 1:ys)
cut [2] matches the clause of line 2. with x being bound to 2.
let (xs,ys) = ([2], [])
in (0:xs, 1:ys)
We conclude then that xs = [2] and ys = []:
(0:[2], 1:[])
Which is the same as:
([0,2], [1])
So what this function is doing is splitting a list in two, by putting the even indexes in the first list and the odd ones in the second list.