#lang racket
(define (func1 x) x) ; x, x
(func1 10) ; 10
(define (func2) "func2")
(define x (func1 func2)) ; x - func2
(x) ; "func2"
(define (MyObject field1 field2) ; field1 field2 (let ((f1 field1) ; f1, field1 (f2 field2)) ; ... (define (get-f1) f1) ; f1 (define (get-f2) f2) ; ... (define (set-f1 x) (set! f1 x)) ; f1 x (define (set-f2 x) (set! f2 x)) ; ... ; (define (dispatch m) ; (cond ((eq? m 'get-f1) get-f1) ; m get-f1, get-f1 ((eq? m 'set-f1) set-f1) ; ... ((eq? m 'get-f2) get-f2) ; ... ((eq? m 'set-f2) set-f2) ; ... ) ) dispatch)) ; MyObject
(define Obj1 (MyObject " Hello " " world!!! ")) ; Obj1
(display ((Obj1 'get-f1))) ; - display - printf, ; ((Obj1 'get-f1)) , get-f1 (display ((Obj1 'get-f2))) ; (newline) ; ; " Hello world!!! "
(define Obj2 (MyObject " Hello " " habra!!! ")) ; ; : "Hello Hello habra!!! world!!!"
(display ((Obj1 'get-f1))) (display ((Obj1 'get-f2))) (newline) (display ((Obj2 'get-f1))) (display ((Obj2 'get-f2))) (newline) ; "Hello world!!!" ; "Hello habra!!!"
(define func-list (list (Obj1 'get-f1) (Obj2 'get-f1) (Obj2 'get-f2) (Obj1 'get-f2)))
Source: https://habr.com/ru/post/144598/
All Articles