Peano' notation simplifies expressing recursive algorithms. I assume matrix indexing is 0 based, and will show you how to get the simplest task of your assignment.
row([Row|_], 0, Row).
row([_|Rows], succ(N), Row) :- row(Rows, N, Row).
test (get the second row, with index 1):
?- row([[a,b], [c,d]], succ(0), R).
R = [c, d] ;
false.
This shows the essential ingredients you'll use to answer the other two tasks.