call/cc
) e definição de macros ao estilo de Common Lisp. No final das contas, tem-se definições de função como em Python ou Ruby, incluindo return
explícito (para os masoquistas).(define-macro (def procname args . body)
`(define (,procname ,@args)
(call/cc (lambda (return)
,@body))))
Exemplo de uso (considerando programadores de linguagens cujo
if
não passa seu resultado para a sua continuação):(def fatorial(n)
(if (< n 2)
(return 1)
(return (* n (fatorial (sub1 n))))))
Exemplo de uso (considerando um schemer sendo obrigado a usar
return
):(def fatorial(n)
(return (if (< n 2)
1
(* n (fatorial (sub1 n))))))
Código equivalente em Scheme puro:
(define (fatorial n)
(if (< n 2)
1
(* n (fatorial (sub1 n)))))