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