summaryrefslogtreecommitdiffhomepage
path: root/racket.html.markdown
diff options
context:
space:
mode:
authorGeoffrey Liu <g-liu@users.noreply.github.com>2016-06-26 21:21:13 +0800
committerven <vendethiel@hotmail.fr>2016-06-26 15:21:13 +0200
commit273fa8606b662dbec5b3b0b2fd0d3dfd648e00ab (patch)
tree8f56cb4b9774155d973e57e07b807a0afc1ee212 /racket.html.markdown
parent19ac1e8eeb92115b1af90ea1aa9181a8f6d48211 (diff)
[racket/en] Add more details about Racket (#2278)
* Add let* and letrec reference * More elaboration on structs * Add code about predefined car, cdr functions * Mention explicit typing, int to real conversion
Diffstat (limited to 'racket.html.markdown')
-rw-r--r--racket.html.markdown34
1 files changed, 34 insertions, 0 deletions
diff --git a/racket.html.markdown b/racket.html.markdown
index 0fe3f030..96dcaf25 100644
--- a/racket.html.markdown
+++ b/racket.html.markdown
@@ -114,18 +114,42 @@ some-var ; => 5
"Alice"
me) ; => "Bob"
+;; let* is like let, but allows you to use previous bindings in creating later bindings
+(let* ([x 1]
+ [y (+ x 1)])
+ (* x y))
+
+;; finally, letrec allows you to define recursive and mutually recursive functions
+(letrec ([is-even? (lambda (n)
+ (or (zero? n)
+ (is-odd? (sub1 n))))]
+ [is-odd? (lambda (n)
+ (and (not (zero? n))
+ (is-even? (sub1 n))))])
+ (is-odd? 11))
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 3. Structs and Collections
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Structs
+; By default, structs are immutable
(struct dog (name breed age))
(define my-pet
(dog "lassie" "collie" 5))
my-pet ; => #<dog>
+; returns whether the variable was constructed with the dog constructor
(dog? my-pet) ; => #t
+; accesses the name field of the variable constructed with the dog constructor
(dog-name my-pet) ; => "lassie"
+; You can explicitly declare a struct to be mutable with the #:mutable option
+(struct rgba-color (red green blue alpha) #:mutable)
+(define burgundy
+ (rgba-color 144 0 32 1.0))
+(set-color-green! burgundy 10)
+(color-green burgundy) ; => 10
+
;;; Pairs (immutable)
;; `cons' constructs pairs, `car' and `cdr' extract the first
;; and second elements
@@ -143,6 +167,16 @@ my-pet ; => #<dog>
;; and a quote can also be used for a literal list value
'(1 2 3) ; => '(1 2 3)
+;; Racket has predefined functions on top of car and cdr, to extract parts of a list
+(cadr (list 1 2 3)) ; => 2
+(car (cdr (list 1 2 3))) ; => 2
+
+(cddr (list 1 2 3)) ; => '(3)
+(cdr (cdr (list 1 2 3))) ; => '(3)
+
+(caddr (list 1 2 3)) ; => 3
+(car (cdr (cdr (list 1 2 3)))) ; => 3
+
;; Can still use `cons' to add an item to the beginning of a list
(cons 4 '(1 2 3)) ; => '(4 1 2 3)