У вас слишком много скобок - это целое выражение:
(((null? shA) a)
((null? shB) b)
(else (sh (cdr shA) (cdr shB))))
, и вы не можете иметь else
в этой позиции.
Синтаксис (cond clause1 clause2 ...)
, а не (cond (clause1 clause2 ...))
, поэтому вам нужно
(define (shorter a b)
(let sh ((shA a) (shB b))
(cond
((null? shA) a)
((null? shB) b)
(else (sh (cdr shA) (cdr shB))))))