define
- это другой верхний уровень и внутри функции. Также, хотя вы не можете поместить define
в сторону if
, вы можете поместить if
в выражение define
:
Это нормально:
(define function1 (if (list? (first t1)) >= >))
(define function2 (if (list? (last t1)) <= <))
Использование let
тоже нормально, но тогда вы можете использовать их только при закрытии, которое оно создает:
(let ([function1 (if (list? (first t1)) >= >)]
[function2 (if (list? (last t1)) <= <)])
;; use function1 and function2 here
)
;; function1 and function2 no longer exists here
То же самое с местным define
:
(let () ;; this is a function called right away
;; these are local define
(define function1 (if (list? (first t1)) >= >))
(define function2 (if (list? (last t1)) <= <))
;; use function1 and function2 here
)
;; function1 and function2 no longer exists here
Это просто необычный способ написания:
(let ()
(letrec ([function1 (if (list? (first t1)) >= >)]
[function2 (if (list? (last t1)) <= <)])
;; use function1 and function2 here
)
;; use function1 and function2 here
)
let
в последнем примере является избыточным и существует только потому, что оно было в предыдущем примере.