Beginner here. I don't see the problem you seem to be referring to
here. In this example below, I recursively define arglen using
define-values.
#lang racket/base
(define-values (arglen)
(case-lambda
[() 'no-list]
[(ls) (if (null? ls)
0
(+ 1 (arglen (cdr ls))))]))
case-lambda-recursion.rkt> (arglen)
'no-list
case-lambda-recursion.rkt> (arglen (list))
0
case-lambda-recursion.rkt> (arglen (list 1))
1
case-lambda-recursion.rkt> (arglen (list 1 1))
2
case-lambda-recursion.rkt> (arglen (list 1 1 1))
3
case-lambda-recursion.rkt>