39 lines
1.3 KiB
Racket
39 lines
1.3 KiB
Racket
#lang racket
|
|
|
|
;; Calling a function that requires no arguments
|
|
(foo)
|
|
|
|
;; Calling a function with a fixed number of arguments
|
|
(foo 1 2 3)
|
|
|
|
;; Calling a function with optional arguments
|
|
;; Calling a function with a variable number of arguments
|
|
(foo 1 2 3) ; same in both cases
|
|
|
|
;; Calling a function with named arguments
|
|
(foo 1 2 #:x 3) ; using #:keywords for the names
|
|
|
|
;; Using a function in statement context
|
|
;; Using a function in first-class context within an expression
|
|
;; Obtaining the return value of a function
|
|
;; -> Makes no sense for Racket, as well as most other functional PLs
|
|
|
|
;; Distinguishing built-in functions and user-defined functions
|
|
(primitive? foo)
|
|
;; but this is mostly useless, since most of Racket is implemented in
|
|
;; itself
|
|
|
|
;; Distinguishing subroutines and functions
|
|
;; -> No difference, though `!' is an idiomatic suffix for names of
|
|
;; side-effect functions, and they usually return (void)
|
|
|
|
;; Stating whether arguments are passed by value or by reference
|
|
|
|
;; -> Always by value, but it's possible to implement languages with
|
|
;; other argument passing styles, including passing arguments by
|
|
;; reference (eg, there is "#lang algol60")
|
|
|
|
;; Is partial application possible and how
|
|
(curry foo 1 2) ; later apply this on 3
|
|
(λ(x) (foo 1 2 x)) ; a direct way of doing the same
|