Update racket-gr.html.markdown

This commit is contained in:
Gloria Dwomoh 2015-10-17 18:22:55 +03:00
parent d04d93cf03
commit df1f9fdb9e

View File

@ -31,12 +31,12 @@ H Racket είναι μια γενικού σκοπού, πολυ-υποδειγ
;; Τα σχόλια S-expression (εκφράσεις S) comments απορρίπτουν την ;; Τα σχόλια S-expression (εκφράσεις S) comments απορρίπτουν την
;; έκφραση που ακολουθεί, δυνατότητα που είναι χρήσιμη για να ;; έκφραση που ακολουθεί, δυνατότητα που είναι χρήσιμη για να
;; κάνουμε σχόλια κάποιες εκφράσεις κατα τη διάρκεια του debugging ;; κάνουμε σχόλια κάποιες εκφράσεις κατά τη διάρκεια του debugging
#; (αυτή η έκφραση δεν θα εκτελεστεί) #; (αυτή η έκφραση δεν θα εκτελεστεί)
;; (Αν δεν καταλαβαίνεται τι είναι οι εκφράσεις , περιμένετε... Θα το μάθουμε ;; (Αν δεν καταλαβαίνεται τι είναι οι εκφράσεις , περιμένετε... Θα το μάθουμε
;; πολύ συντομα!) ;; πολύ σύντομα!)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -57,8 +57,8 @@ H Racket είναι μια γενικού σκοπού, πολυ-υποδειγ
;; όπου το f είναι η συνάρτηση και τα x y z ;; όπου το f είναι η συνάρτηση και τα x y z
;; είναι οι όροι που η συνάρτηση δέχεται ;; είναι οι όροι που η συνάρτηση δέχεται
;; ως ορίσματα. Αν θέλουμε να δημιουργήσουμε ;; ως ορίσματα. Αν θέλουμε να δημιουργήσουμε
;; μια λίστα στην κυριολεξία απο δίαφορα δεδομένα, ;; μια λίστα στην κυριολεξία από δίαφορα δεδομένα,
;; χρησιμοποιούμε το ' για να το εμποδίσουμε απο το να ;; χρησιμοποιούμε το ' για να το εμποδίσουμε από το να
;; αξιολογηθεί σαν έκφραση. Για παράδειγμα: ;; αξιολογηθεί σαν έκφραση. Για παράδειγμα:
'(+ 1 2) ; => Παραμένει (+ 1 2) και δεν γίνεται η πράξη '(+ 1 2) ; => Παραμένει (+ 1 2) και δεν γίνεται η πράξη
;; Τώρα , ας κάνουμε μερικές πράξεις ;; Τώρα , ας κάνουμε μερικές πράξεις
@ -88,15 +88,15 @@ H Racket είναι μια γενικού σκοπού, πολυ-υποδειγ
;;; Τα αλφαριθμητικά είναι πίνακες χαρακτήρων συγκεκριμένου μήκους ;;; Τα αλφαριθμητικά είναι πίνακες χαρακτήρων συγκεκριμένου μήκους
"Hello, world!" "Hello, world!"
"Benjamin \"Bugsy\" Siegel" ; Το backslash είναι χαρακτήρας διαφυγής "Benjamin \"Bugsy\" Siegel" ; Το backslash είναι χαρακτήρας διαφυγής
"Foo\tbar\41\x21\u0021\a\r\n" ; Συμπεριλαμβάνονται οι χαρακτήες διαφυγής της C, "Foo\tbar\41\x21\u0021\a\r\n" ; Συμπεριλαμβάνονται οι χαρακτήρες διαφυγής της C,
; σε Unicode ; σε Unicode
"λx:(μα.α→α).xx" ; Μπορούν να υπάρχουν και Unicode χαρακτήρες "λx:(μα.α→α).xx" ; Μπορούν να υπάρχουν και Unicode χαρακτήρες
;; Μπορούμε να εννώσουμε αλφαριθμητικά! ;; Μπορούμε να ενώσουμε αλφαριθμητικά!
(string-append "Hello " "world!") ; => "Hello world!" (string-append "Hello " "world!") ; => "Hello world!"
;; Ένα αλφαριθμητικό μπορούμε να το χρησιμοπιησουμε ;; Ένα αλφαριθμητικό μπορούμε να το χρησιμοποιήσουμε
;; όπως και μια λίστα απο χαρακτήρες ;; όπως και μια λίστα από χαρακτήρες
(string-ref "Apple" 0) ; => #\A ;; Παίρνουμε το πρώτο στοιχείο (string-ref "Apple" 0) ; => #\A ;; Παίρνουμε το πρώτο στοιχείο
;; Η συνάρτηση format μπορεί να χρησιμοποιηθεί για ;; Η συνάρτηση format μπορεί να χρησιμοποιηθεί για
@ -117,18 +117,18 @@ H Racket είναι μια γενικού σκοπού, πολυ-υποδειγ
some-var ; => 5 some-var ; => 5
;; Μπορούμε επίσης να χρησιμοποιήσουμε unicode χαρακτήρες. ;; Μπορούμε επίσης να χρησιμοποιήσουμε unicode χαρακτήρες.
(define ⊆ subset?) ;; Εδώ ουστιαστικά δίνουμε στη ήδη ύπαρχουσα συνάρτηση subset? (define ⊆ subset?) ;; Εδώ ουσιαστικά δίνουμε στη ήδη υπάρχουσα συνάρτηση subset?
;; ένα νέο όνομα ⊆ , και παρακάτω την καλούμε με το νέο της όνομα. ;; ένα νέο όνομα ⊆ , και παρακάτω την καλούμε με το νέο της όνομα.
(⊆ (set 3 2) (set 1 2 3)) ; => #t (⊆ (set 3 2) (set 1 2 3)) ; => #t
;; Αν ζητήσουμε μια μεταβλητή που δεν έχει οριστεί πρίν π.χ ;; Αν ζητήσουμε μια μεταβλητή που δεν έχει οριστεί πριν π.χ.
(printf name) (printf name)
;; θα πάρουμε το παρακάτω μήνυμα ;; θα πάρουμε το παρακάτω μήνυμα
;name: undefined; ;name: undefined;
; cannot reference undefined identifier ; cannot reference undefined identifier
; context...: ; context...:
;; Η τοπική δέσμευση : `me' δευσμεύεται με το "Bob" μόνο μέσα στο (let ...) ;; Η τοπική δέσμευση : `me' δεσμεύεται με το "Bob" μόνο μέσα στο (let ...)
(let ([me "Bob"]) (let ([me "Bob"])
"Alice" "Alice"
me) ; => "Bob" me) ; => "Bob"
@ -156,7 +156,7 @@ my-pet ; => #<dog>
;;; Λίστες ;;; Λίστες
;; Οι λίστες είναι linked-list δομές δεδομένων, ;; Οι λίστες είναι linked-list δομές δεδομένων,
;; που έχουν δημιουργηθεί απο ζευγάρια 'cons' ;; που έχουν δημιουργηθεί από ζευγάρια 'cons'
;; και τελειώνουν με 'null' (ή αλλιώς '()) για να ;; και τελειώνουν με 'null' (ή αλλιώς '()) για να
;; δηλώσουν ότι αυτό είναι το τέλος της λίστας ;; δηλώσουν ότι αυτό είναι το τέλος της λίστας
(cons 1 (cons 2 (cons 3 null))) ; => '(1 2 3) (cons 1 (cons 2 (cons 3 null))) ; => '(1 2 3)
@ -191,12 +191,12 @@ my-pet ; => #<dog>
;; Τα διανύσματα είναι πίνακες σταθερού μήκους ;; Τα διανύσματα είναι πίνακες σταθερού μήκους
#(1 2 3) ; => '#(1 2 3) #(1 2 3) ; => '#(1 2 3)
;; Χρησιμοποιύμε το `vector-append' για να προσθέσουμε διανύσματα ;; Χρησιμοποιούμε το `vector-append' για να προσθέσουμε διανύσματα
(vector-append #(1 2 3) #(4 5 6)) ; => #(1 2 3 4 5 6) (vector-append #(1 2 3) #(4 5 6)) ; => #(1 2 3 4 5 6)
;;; Σύνολα ;;; Σύνολα
;; Δημιουργούμε ένα σύνολο απο μία λίστα ;; Δημιουργούμε ένα σύνολο από μία λίστα
(list->set '(1 2 3 1 2 3 3 2 1 3 2 1)) ; => (set 1 2 3) (list->set '(1 2 3 1 2 3 3 2 1 3 2 1)) ; => (set 1 2 3)
;; Προσθέτουμε έναν αριθμό στο σύνολο χρησιμοποιώντας το `set-add' ;; Προσθέτουμε έναν αριθμό στο σύνολο χρησιμοποιώντας το `set-add'
@ -214,10 +214,10 @@ my-pet ; => #<dog>
;; Δημιουργήστε ένα αμετάβλητο πίνακα κατακερματισμού ;; Δημιουργήστε ένα αμετάβλητο πίνακα κατακερματισμού
(define m (hash 'a 1 'b 2 'c 3)) (define m (hash 'a 1 'b 2 'c 3))
;; Παίρνουμε μια τιμή απο τον πίνακα ;; Παίρνουμε μια τιμή από τον πίνακα
(hash-ref m 'a) ; => 1 (hash-ref m 'a) ; => 1
;; Άν ζητήσουμε μια τιμή που δέν υπάρχει παίρνουμε μία εξαίρεση ;; Αν ζητήσουμε μια τιμή που δεν υπάρχει παίρνουμε μία εξαίρεση
; (hash-ref m 'd) => no value found for key ; (hash-ref m 'd) => no value found for key
;; Μπορούμε να δώσουμε μια default τιμή για τα κλειδιά που λείπουν ;; Μπορούμε να δώσουμε μια default τιμή για τα κλειδιά που λείπουν
@ -234,7 +234,7 @@ m2 ; => '#hash((b . 2) (a . 1) (d . 4) (c . 3))
m ; => '#hash((b . 2) (a . 1) (c . 3)) <-- δεν υπάρχει `d' m ; => '#hash((b . 2) (a . 1) (c . 3)) <-- δεν υπάρχει `d'
;; Χρησιμοποιούμε το `hash-remove' για να αφαιρέσουμε ;; Χρησιμοποιούμε το `hash-remove' για να αφαιρέσουμε
;; κλειδία ;; κλειδιά
(hash-remove m 'a) ; => '#hash((b . 2) (c . 3)) (hash-remove m 'a) ; => '#hash((b . 2) (c . 3))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@ -247,12 +247,12 @@ m ; => '#hash((b . 2) (a . 1) (c . 3)) <-- δεν υπάρχει `d'
;; Μπορούμε επίσης να χρησιμοποιήσουμε το `λ' ;; Μπορούμε επίσης να χρησιμοποιήσουμε το `λ'
(λ () "Hello World") ; => Ίδια συνάρτηση (λ () "Hello World") ; => Ίδια συνάρτηση
;; Χρησιμοποιύμε τις παρενθέσεις για να καλέσουμε όλες τις συναρτήσεις ;; Χρησιμοποιούμε τις παρενθέσεις για να καλέσουμε όλες τις συναρτήσεις
;; συμπεριλαμβανομένων και των εκφράσεων 'λάμδα' ;; συμπεριλαμβανομένων και των εκφράσεων 'λάμδα'
((lambda () "Hello World")) ; => "Hello World" ((lambda () "Hello World")) ; => "Hello World"
((λ () "Hello World")) ; => "Hello World" ((λ () "Hello World")) ; => "Hello World"
;; Εκχωρούμε σε μια μετάβλητη την συνάρτηση ;; Εκχωρούμε σε μια μεταβλητή την συνάρτηση
(define hello-world (lambda () "Hello World")) (define hello-world (lambda () "Hello World"))
(hello-world) ; => "Hello World" (hello-world) ; => "Hello World"
@ -302,7 +302,7 @@ m ; => '#hash((b . 2) (a . 1) (c . 3)) <-- δεν υπάρχει `d'
(lambda (name . args) (lambda (name . args)
(format "Hello ~a, you passed ~a extra args" name (length args)))) (format "Hello ~a, you passed ~a extra args" name (length args))))
;; Και με λέξεις κλειδία ;; Και με λέξεις κλειδιά
(define (hello-k #:name [name "World"] #:greeting [g "Hello"] . args) (define (hello-k #:name [name "World"] #:greeting [g "Hello"] . args)
(format "~a ~a, ~a extra args" g name (length args))) (format "~a ~a, ~a extra args" g name (length args)))
(hello-k) ; => "Hello World, 0 extra args" (hello-k) ; => "Hello World, 0 extra args"
@ -347,7 +347,7 @@ m ; => '#hash((b . 2) (a . 1) (c . 3)) <-- δεν υπάρχει `d'
(eq? (string-append "foo" "bar") (string-append "foo" "bar")) ; => #f (eq? (string-append "foo" "bar") (string-append "foo" "bar")) ; => #f
;; Το `eqv?' υποστηρίζει την σύκριση αριθμών αλλα και χαρακτήρων ;; Το `eqv?' υποστηρίζει την σύγκριση αριθμών αλλά και χαρακτήρων
;; Για άλλα ήδη μεταβλητών το `eqv?' και το `eq?' επιστρέφουν το ίδιο. ;; Για άλλα ήδη μεταβλητών το `eqv?' και το `eq?' επιστρέφουν το ίδιο.
(eqv? 3 3.0) ; => #f (eqv? 3 3.0) ; => #f
(eqv? (expt 2 100) (expt 2 100)) ; => #t (eqv? (expt 2 100) (expt 2 100)) ; => #t
@ -365,12 +365,12 @@ m ; => '#hash((b . 2) (a . 1) (c . 3)) <-- δεν υπάρχει `d'
(equal? (list 3) (list 3)) ; => #t (equal? (list 3) (list 3)) ; => #t
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 5. Έλεχγος Ροής ;; 5. Έλεγχος Ροής
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Συνθήκες (conditionals) ;;; Συνθήκες (conditionals)
(if #t ; έκφραση ελέχγου (if #t ; έκφραση ελέγχου
"this is true" ; έκφραση then "this is true" ; έκφραση then
"this is false") ; έκφραση else "this is false") ; έκφραση else
; => "this is true" ; => "this is true"
@ -483,7 +483,7 @@ m ; => '#hash((b . 2) (a . 1) (c . 3)) <-- δεν υπάρχει `d'
(values i (number->string i))) (values i (number->string i)))
; => '#hash((1 . "1") (2 . "2") (3 . "3")) ; => '#hash((1 . "1") (2 . "2") (3 . "3"))
;; Υπάρχουν πολλά είδη απο προϋπάρχοντες τρόπους για να συλλέγουμε ;; Υπάρχουν πολλά είδη από προϋπάρχοντες τρόπους για να συλλέγουμε
;; τιμές από τους βρόχους ;; τιμές από τους βρόχους
(for/sum ([i 10]) (* i i)) ; => 285 (for/sum ([i 10]) (* i i)) ; => 285
@ -491,7 +491,7 @@ m ; => '#hash((b . 2) (a . 1) (c . 3)) <-- δεν υπάρχει `d'
(for/and ([i 10] [j (in-range 10 20)]) (< i j)) ; => #t (for/and ([i 10] [j (in-range 10 20)]) (< i j)) ; => #t
(for/or ([i 10] [j (in-range 0 20 2)]) (= i j)) ; => #t (for/or ([i 10] [j (in-range 0 20 2)]) (= i j)) ; => #t
;; Και για να χρησιμοποιήσουμε ένα αφθαίρετο συνδιασμό χρησιμοποιούμε ;; Και για να χρησιμοποιήσουμε ένα αυθαίρετο συνδυασμό χρησιμοποιούμε
;; το 'for/fold' ;; το 'for/fold'
(for/fold ([sum 0]) ([i '(1 2 3 4)]) (+ sum i)) ; => 10 (for/fold ([sum 0]) ([i '(1 2 3 4)]) (+ sum i)) ; => 10
@ -524,17 +524,17 @@ m ; => '#hash((b . 2) (a . 1) (c . 3)) <-- δεν υπάρχει `d'
(set! n (add1 n)) (set! n (add1 n))
n ; => 6 n ; => 6
;; Χρησιμοποιούμε τα boxes για να δηλώσουμε ρητά ότι μια μεταβητή ;; Χρησιμοποιούμε τα boxes για να δηλώσουμε ρητά ότι μια μεταβλητή
;; θα είναι mutable (θα μπορεί να αλλάξη η τιμή της) ;; θα είναι mutable (θα μπορεί να αλλάξει η τιμή της)
;; Αυτό είναι παρόμοιο με τους pointers σε άλλες γλώσσες ;; Αυτό είναι παρόμοιο με τους pointers σε άλλες γλώσσες
(define n* (box 5)) (define n* (box 5))
(set-box! n* (add1 (unbox n*))) (set-box! n* (add1 (unbox n*)))
(unbox n*) ; => 6 (unbox n*) ; => 6
;; Πολλοί τύποι μεταβλητών στη Racket είναι αμετάβλητοι πχ τα ζεύγη, οι ;; Πολλοί τύποι μεταβλητών στη Racket είναι αμετάβλητοι π.χ. τα ζεύγη, οι
;; λίστες κτλ. Άλλοι υπάρχουν και σε μεταβλητή και σε αμετάβλητη μορφή ;; λίστες κτλ. Άλλοι υπάρχουν και σε μεταβλητή και σε αμετάβλητη μορφή
;; πχ αλφαριθμητικά, διανύσματα κτλ ;; π.χ. αλφαριθμητικά, διανύσματα κτλ.
(define vec (vector 2 2 3 4)) (define vec (vector 2 2 3 4))
(define wall (make-vector 100 'bottle-of-beer)) (define wall (make-vector 100 'bottle-of-beer))
;; Χρησιμοποιούμε το 'vector-set!' για να ανεώσουμε κάποια ;; Χρησιμοποιούμε το 'vector-set!' για να ανεώσουμε κάποια
@ -579,7 +579,7 @@ vec ; => #(1 2 3 4)
(printf fmt (make-string n ch)) (printf fmt (make-string n ch))
(newline))) (newline)))
;; Χρησιμοποιομε το 'require' για να πάρουμε όλα τα ;; Χρησιμοποιουμε το 'require' για να πάρουμε όλα τα
;; παρεχόμενα ονόματα από μία ενότητα ;; παρεχόμενα ονόματα από μία ενότητα
(require 'cake) ; το ' είναι για τοπική υποενότητα (require 'cake) ; το ' είναι για τοπική υποενότητα
(print-cake 3) (print-cake 3)
@ -634,7 +634,7 @@ vec ; => #(1 2 3 4)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Οι μακροεντολές μας επιτρέπουν να επεκτείνουμε ;; Οι μακροεντολές μας επιτρέπουν να επεκτείνουμε
;; το συντακτικό μιάς γλώσσας. ;; το συντακτικό μιας γλώσσας.
;; Ας προσθέσουμε έναν βρόχο while ;; Ας προσθέσουμε έναν βρόχο while
(define-syntax-rule (while condition body ...) (define-syntax-rule (while condition body ...)
@ -664,20 +664,20 @@ vec ; => #(1 2 3 4)
;; (set! tmp other) ;; (set! tmp other)
;; (set! other tmp_1)) ;; (set! other tmp_1))
;; Αλλά ακόμα υπάρχουν ακόμη μετασχηματισμοί του κώδικα, π.χ: ;; Αλλά ακόμα υπάρχουν ακόμη μετασχηματισμοί του κώδικα, π.χ.:
(define-syntax-rule (bad-while condition body ...) (define-syntax-rule (bad-while condition body ...)
(when condition (when condition
body ... body ...
(bad-while condition body ...))) (bad-while condition body ...)))
;; αυτή η μακροεντολή είναι χαλασμένη: δημιουγεί ατέρμονα βρόχο ;; αυτή η μακροεντολή είναι χαλασμένη: δημιουργεί ατέρμονα βρόχο
;; και αν προσπαθήσουμε να το χρησιμοποιήσουμε, ο μεταγλωττιστής ;; και αν προσπαθήσουμε να το χρησιμοποιήσουμε, ο μεταγλωττιστής
;; θα μπεί στον ατέρμονα βρόχο. ;; θα μπει στον ατέρμονα βρόχο.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 10. Συμβόλαια (Contracts) ;; 10. Συμβόλαια (Contracts)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Τα συμβόλαια βάζουν περιορισμόυς σε τιμές που προέρχονται ;; Τα συμβόλαια βάζουν περιορισμούς σε τιμές που προέρχονται
;; από ενότητες (modules) ;; από ενότητες (modules)
(module bank-account racket (module bank-account racket
(provide (contract-out (provide (contract-out
@ -719,7 +719,7 @@ vec ; => #(1 2 3 4)
(displayln "Hola mundo" out-port) (displayln "Hola mundo" out-port)
(close-output-port out-port) (close-output-port out-port)
;; Διαβάζουμε απο αρχείο ξανά ;; Διαβάζουμε από αρχείο ξανά
(define in-port (open-input-file "/tmp/tmp.txt")) (define in-port (open-input-file "/tmp/tmp.txt"))
(displayln (read-line in-port)) (displayln (read-line in-port))
; => "Hello World" ; => "Hello World"