thunk.scm 529 B

123456789101112131415161718192021222324252627282930
  1. ;; Idea:
  2. ;; Write (thunk (+ a b)) instead of (lambda () (+ a b)).
  3. (import
  4. (except (rnrs base) let-values)
  5. (only (guile)
  6. lambda* λ))
  7. ;; A thunk is a lambda expression, which takes no arguments.
  8. (define-syntax thunk
  9. (syntax-rules ()
  10. [(thunk expr* ...)
  11. (lambda () expr* ...)]))
  12. ;; Usage example:
  13. (define higher-order-func
  14. (λ (message-displayer)
  15. (message-displayer)))
  16. (higher-order-func
  17. (thunk
  18. (display
  19. (simple-format #f "~s\n" "Hello!"))
  20. (display
  21. (simple-format #f "~s\n" "World!"))))