The implementation of head/2 is simple:
head([X | _], X).
Note that the underscore here means "zero or more elements that we do not need."
There is no need to highlight the case when there is only one item in the list (and then use cut).
source share