From c5fcf7179a83ef65c86c6a4a390029149e518649 Mon Sep 17 00:00:00 2001 From: Franciszek Malinka Date: Tue, 5 Oct 2021 21:49:54 +0200 Subject: Duzy commit ze smieciami --- Semestr 2/racket/l13/oceny.txt | 18 ------ Semestr 2/racket/l13/rozw.rkt | 79 ----------------------- Semestr 2/racket/l13/solution.rkt | 124 ----------------------------------- Semestr 2/racket/l13/zad6.rkt | 132 -------------------------------------- 4 files changed, 353 deletions(-) delete mode 100644 Semestr 2/racket/l13/oceny.txt delete mode 100644 Semestr 2/racket/l13/rozw.rkt delete mode 100644 Semestr 2/racket/l13/solution.rkt delete mode 100644 Semestr 2/racket/l13/zad6.rkt (limited to 'Semestr 2/racket/l13') diff --git a/Semestr 2/racket/l13/oceny.txt b/Semestr 2/racket/l13/oceny.txt deleted file mode 100644 index 9f17cad..0000000 --- a/Semestr 2/racket/l13/oceny.txt +++ /dev/null @@ -1,18 +0,0 @@ -1 sem - -MDM - 5 5 -AO - 5 -AM 1 - 5 5 -LDI - 5 5 -MIA - 5 - -8 * 5 - - -2 sem - -Topologia - 5 3 -Analiza - 4 4 -MP - 5 5 -PPS - 5 -Algebra - 5 5 \ No newline at end of file diff --git a/Semestr 2/racket/l13/rozw.rkt b/Semestr 2/racket/l13/rozw.rkt deleted file mode 100644 index b4094db..0000000 --- a/Semestr 2/racket/l13/rozw.rkt +++ /dev/null @@ -1,79 +0,0 @@ -#lang typed/racket - - -;;; zadanie 1 - -(: prefixes (All (a) (-> (Listof a) (Listof (Listof a))))) -(define (prefixes xs) - (if (null? xs) - (list null) - (cons xs (prefixes (cdr xs))))) - - - -;;; zadanie 2 - -(struct vector2 ([x : Real] [y : Real]) #:transparent) -(struct vector3 ([x : Real] [y : Real] [z : Real]) #:transparent) - -(define-type Vector (U vector2 vector3)) -(define-predicate vector? Vector) - - -(: square (-> Real Nonnegative-Real)) -(define (square x) - (if (< x 0) (* x x) (* x x))) - - -;;; pierwsza wersja - -(: vector-length (-> Vector Nonnegative-Real)) -(define (vector-length v) - (if (vector2? v) - (match v [(vector2 x y) (sqrt (+ (square x) (square y)))]) - (match v [(vector3 x y z) (sqrt (+ (square x) (square y) (square z)))]))) - - -;;; druga wersja - -(: vector-length-match (-> Vector Nonnegative-Real)) -(define (vector-length-match v) - (match v - [(vector2 x y) (sqrt (+ (square x) (square y)))] - [(vector3 x y z) (sqrt (+ (square x) (square y) (square z)))])) - - - -;;; zadanie 4 - -(struct leaf () #:transparent) -(struct [a] node ([v : a] [xs : (Listof (Tree a))]) #:transparent) - -(define-type (Tree a) (node a)) -(define-predicate tree? (Tree Any)) - - -(: flat-map (All (a) (-> (-> (Tree a) (Listof a)) (Listof (Tree a)) (Listof a)))) -(define (flat-map f xs) - (if (null? xs) - null - (append (f (car xs)) (flat-map f (cdr xs))))) - -(: preorder (All (a) (-> (Tree a) (Listof a)))) -(define (preorder t) - (match t - [(node v xs) - (cons v (flat-map preorder xs))])) - -;;; (preorder (node 1 (list -;;; (node 2 (list -;;; (node 3 '()) -;;; (node 4 '()))) -;;; (node 5 '()) -;;; (node 'x (list -;;; (node 't (list -;;; (node 'z '())))))))) - - -;;; zadanie 6 - diff --git a/Semestr 2/racket/l13/solution.rkt b/Semestr 2/racket/l13/solution.rkt deleted file mode 100644 index 61804b3..0000000 --- a/Semestr 2/racket/l13/solution.rkt +++ /dev/null @@ -1,124 +0,0 @@ -#lang typed/racket - -; --------- ; -; Wyrazenia ; -; --------- ; - -(provide parse typecheck) - -(define-type Expr (U const binop var-expr let-expr if-expr)) -(define-type Value (U Real Boolean)) -(define-type ArithOp (U '+ '- '/ '* '%)) -;;; (define-type ModOp '%) -(define-type CompOp (U '= '> '>= '< '<=)) -(define-type LogicOp (U 'and 'or)) -(define-type BinopSym (U ArithOp CompOp LogicOp)) - -(struct const ([val : Value]) #:transparent) -(struct binop ([op : BinopSym] [l : Expr] [r : Expr]) #:transparent) -(struct var-expr ([id : Symbol]) #:transparent) -(struct let-expr ([id : Symbol] [e1 : Expr] [e2 : Expr]) #:transparent) -(struct if-expr ([eb : Expr] [et : Expr] [ef : Expr]) #:transparent) - -(define-predicate expr? Expr) -(define-predicate value? Value) -(define-predicate arith-op? ArithOp) -;;; (define-predicate mod-op? ModOp) -(define-predicate comp-op? CompOp) -(define-predicate logic-op? LogicOp) -(define-predicate binop-sym? BinopSym) -(define-predicate let-list? (List Symbol Any)) - -(: parse (-> Any Expr)) -(define (parse q) - (match q - [_ #:when (value? q) (const q)] - [_ #:when (eq? q 'true) (const true)] - [_ #:when (eq? q 'false) (const false)] ; <---------------------------- !!! - [_ #:when (symbol? q) (var-expr q)] - [`(,s ,e1 ,e2) - #:when (and (eq? s 'let) (let-list? e1)) - (let-expr (car e1) - (parse (cadr e1)) - (parse e2))] - [`(,s ,eb ,et ,ef) - #:when (eq? s 'if) - (if-expr (parse eb) - (parse et) - (parse ef))] - [`(,s ,e1 ,e2) - #:when (binop-sym? s) - (binop s - (parse e1) - (parse e2))] - [else (error "Parse error" q)])) - -; ---------- ; -; Srodowiska ; -; ---------- ; - -(define-type EType (U 'real 'boolean)) -(define-predicate EType? EType) - -(struct environ ([xs : (Listof (Pairof Symbol EType))])) -(define env-empty (environ null)) - -(: env-add (-> Symbol EType environ environ)) -(define (env-add x v env) - (environ (cons (cons x v) (environ-xs env)))) - -(: env-lookup (-> Symbol environ EType)) -(define (env-lookup x env) - (: assoc-lookup (-> (Listof (Pairof Symbol EType)) EType)) - (define (assoc-lookup xs) - (cond [(null? xs) (error "Unknown identifier" x)] - [(eq? x (car (car xs))) (cdr (car xs))] - [else (assoc-lookup (cdr xs))])) - (assoc-lookup (environ-xs env))) - -(: check-op (-> Expr Expr EType EType environ (U EType #f))) -(define (check-op e1 e2 arg-type ret-type env) - (if (and (eq? (typecheck-env e1 env) arg-type) - (eq? (typecheck-env e2 env) arg-type)) - ret-type - #f)) - -(: typecheck-env (-> Expr environ (U EType #f))) -(define (typecheck-env e env) - (match e - [(const val) - (cond - [(real? val) 'real] - [(boolean? val) 'boolean])] - [(var-expr id) (env-lookup id env)] - [(binop op e1 e2) - (cond - [(arith-op? op) (check-op e1 e2 'real 'real env)] - [(comp-op? op) (check-op e1 e2 'real 'boolean env)] - [(logic-op? op) (check-op e1 e2 'boolean 'boolean env)])] - [(let-expr id e1 e2) - (let ((id-type (typecheck-env e1 env))) - (if id-type - (typecheck-env e2 (env-add id id-type env)) - #f))] - [(if-expr eb et ef) - (let ((eb-type (typecheck-env eb env))) - (if (not (eq? eb-type 'boolean)) - #f - (let ((et-type (typecheck-env et env)) - (ef-type (typecheck-env ef env))) - (if (eq? et-type ef-type) ;;; nie trzeba sprawdzac czy ktores z nich to #f - et-type ;;; jesli tak jest, to i tak sie na pewno zwroci #f - #f))))])) - -(: typecheck (-> Expr (U EType #f))) -(define (typecheck e) - (typecheck-env e env-empty)) - -(define program - '(if (or (< (% 123 10) 5) - true) - (+ 2 3) - (/ 2 0))) - -(define (test-eval) (eval (parse program))) \ No newline at end of file diff --git a/Semestr 2/racket/l13/zad6.rkt b/Semestr 2/racket/l13/zad6.rkt deleted file mode 100644 index 1dcfbfc..0000000 --- a/Semestr 2/racket/l13/zad6.rkt +++ /dev/null @@ -1,132 +0,0 @@ -#lang typed/racket - -; Do let-env.rkt dodajemy wartosci boolowskie -; -; Miejsca, ktore sie zmienily oznaczone sa przez !!! - -; --------- ; -; Wyrazenia ; -; --------- ; - -(define-type Expr (U const binop var-expr let-expr if-expr)) -(define-type Value (U Real Boolean)) -(define-type BinopSym (U '+ '- '/ '* '% '= '> '>= '< '<= 'and 'or)) - -(struct const ([val : Value]) #:transparent) -(struct binop ([op : BinopSym] [l : Expr] [r : Expr]) #:transparent) -(struct var-expr ([id : Symbol]) #:transparent) -(struct let-expr ([id : Symbol] [e1 : Expr] [e2 : Expr]) #:transparent) -(struct if-expr ([eb : Expr] [et : Expr] [ef : Expr]) #:transparent) - - -(define-predicate expr? Expr) -(define-predicate value? Value) -(define-predicate binop-sym? BinopSym) -(define-predicate let-list? (List Symbol Any)) - -(: parse (-> Any Expr)) -(define (parse q) - (match q - [_ #:when (value? q) (const q)] - [_ #:when (eq? q 'true) (const true)] - [_ #:when (eq? q 'false) (const false)] ; <---------------------------- !!! - [_ #:when (symbol? q) (var-expr q)] - [`(,s ,e1 ,e2) - #:when (and (eq? s 'let) (let-list? e1)) - (let-expr (car e1) - (parse (cadr e1)) - (parse e2))] - [`(,s ,eb ,et ,ef) - #:when (eq? s 'if) - (if-expr (parse eb) - (parse et) - (parse ef))] - [`(,s ,e1 ,e2) - #:when (binop-sym? s) - (binop s - (parse e1) - (parse e2))] - [else (error "Parse error" q)])) - -;;; (define (test-parse) (parse '(let [x (+ 2 2)] (+ x 1)))) - -; ---------- ; -; Srodowiska ; -; ---------- ; - -(struct environ ([xs : (Listof (Pairof Symbol Value))])) -(define env-empty (environ null)) - -(: env-add (-> Symbol Value environ environ)) -(define (env-add x v env) - (environ (cons (cons x v) (environ-xs env)))) - -(: env-lookup (-> Symbol environ Value)) -(define (env-lookup x env) - (: assoc-lookup (-> (Listof (Pairof Symbol Value)) Value)) - (define (assoc-lookup xs) - (cond [(null? xs) (error "Unknown identifier" x)] - [(eq? x (car (car xs))) (cdr (car xs))] - [else (assoc-lookup (cdr xs))])) - (assoc-lookup (environ-xs env))) - -; --------- ; -; Ewaluacja ; -; --------- ; - -(: arith-op (-> (-> Real Real Real) (-> Value Value Value))) -(define (arith-op op) - (lambda (x y) (if (and (real? x) (real? y)) - (ann (op x y) Value) - (error "Wrong args for arithmetic operator" op x y)))) - -(: mod-op (-> (-> Integer Integer Integer) (-> Value Value Value))) -(define (mod-op op) - (lambda (x y) (if (and (exact-integer? x) (exact-integer? y)) - (ann (op x y) Value) - (error "Wrong args for modulo operator" op x y)))) - -(: logic-op (-> (-> Boolean Boolean Boolean) (-> Value Value Value))) -(define (logic-op op) - (lambda (x y) (if (and (boolean? x) (boolean? y)) - (ann (op x y) Value) - (error "Wrong args for logic operator" op x y)))) - -(: comp-op (-> (-> Real Real Boolean) (-> Value Value Value))) -(define (comp-op op) - (lambda (x y) (if (and (real? x) (real? y)) - (ann (op x y) Value) - (error "Wrong args for comparator" op x y)))) - - -(: op->proc (-> BinopSym (-> Value Value Value))) -(define (op->proc op) - (match op ['+ (arith-op +)] ['- (arith-op -)] ['* (arith-op *)] ['/ (arith-op /)] - ['% (mod-op modulo)] - ['= (comp-op =)] ['> (comp-op >)] ['>= (comp-op >=)] ['< (comp-op <)] ['<= (comp-op <=)] - ['and (logic-op (lambda (x y) (and x y)))] - ['or (logic-op (lambda (x y) (or x y)))])) - -(: eval-env (-> Expr environ Value)) -(define (eval-env e env) - (match e - [(const n) n] - [(binop op l r) ((op->proc op) (eval-env l env) - (eval-env r env))] - [(let-expr x e1 e2) - (eval-env e2 (env-add x (eval-env e1 env) env))] - [(var-expr x) (env-lookup x env)] - [(if-expr eb et ef) (if (eval-env eb env) ; <----------------- !!! - (eval-env et env) - (eval-env ef env))])) - -(: eval (-> Expr Value)) -(define (eval e) (eval-env e env-empty)) - -(define program - '(if (or (< (% 123 10) 5) - true) - (+ 2 3) - (/ 2 0))) - -;;; (define (test-eval) (eval (parse program))) \ No newline at end of file -- cgit v1.2.3