From 91d7fb3beb2605709061e79abd56f2bfeaa51955 Mon Sep 17 00:00:00 2001 From: Dmitriy Gorshenin Date: Thu, 12 May 2022 19:14:13 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=BB=D0=B5=D0=B7=D0=BD=D1=8B?= =?UTF-8?q?=D0=B5=20=D0=BA=D0=BE=D0=BC=D0=B1=D0=B8=D0=BD=D0=B0=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Солкин Кирилл/README.md | 19 ++++++ Солкин Кирилл/polezn_komb.rkt | 83 +++++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 Солкин Кирилл/README.md create mode 100644 Солкин Кирилл/polezn_komb.rkt diff --git a/Солкин Кирилл/README.md b/Солкин Кирилл/README.md new file mode 100644 index 0000000..1b27e1b --- /dev/null +++ b/Солкин Кирилл/README.md @@ -0,0 +1,19 @@ +# Полезные комбинаторы +## Код из книги + #let mem x l = exists (fun y -> y = x) l;; + mem : ’a -> ’a list -> bool = + #let insert x l = + if mem x l then l else x::l;; + insert : ’a -> ’a list -> ’a list = + #let union l1 l2 = itlist insert l1 l2;; + union : ’a list -> ’a list -> ’a list = + #let setify l = union l [];; + setify : ’a list -> ’a list = + #let Union l = itlist union l [];; + Union : ’a list list -> ’a list = + #let intersect l1 l2 = filter (fun x -> mem x l2) l1;; + intersect : ’a list -> ’a list -> ’a list = + #let subtract l1 l2 = filter (fun x -> not mem x l2) l1;; + subtract : ’a list -> ’a list -> ’a list = + #let subset l1 l2 = forall (fun t -> mem t l2) l1;; + subset : ’a list -> ’a list -> bool = \ No newline at end of file diff --git a/Солкин Кирилл/polezn_komb.rkt b/Солкин Кирилл/polezn_komb.rkt new file mode 100644 index 0000000..e442944 --- /dev/null +++ b/Солкин Кирилл/polezn_komb.rkt @@ -0,0 +1,83 @@ +#lang racket +(define (itlist f lst b) + (if (null? lst) + b + (f (car lst) (itlist f (list-tail lst 1) b)))) + +(define (sum lst) + (itlist + lst 0)) + +(define (prod lst) + (itlist * lst 1)) + +(define (mid p) + (lambda (x s) + (if (p x) + (cons x s) + s))) + +(define (filter p lst) + (itlist (mid p) lst '())) + +(define (andt l b) + (and l b)) + +(define (ort l b) + (or l b)) + +(define (forall p lst) + (define a true) + (itlist andt (map p lst) a)) + +(define (exists p lst) + (define a false) + (itlist ort (map p lst) a)) + +(define (tem l b) + (+ b 1)) + +(define (length lst) + (itlist tem lst 0)) + +(define (append l m) + (itlist cons l m)) + +(define (const f) + (lambda (x y) (cons (f x) y))) + +(define (map f l) + (define s '()) + (define con (const f)) + (itlist con l s)) + +(define (mem x lst) + (exists (lambda (y) (= y x)) lst)) + +(define (insert x lst) + (if (mem x lst) + lst + (cons x lst))) + +(define (union l1 l2) + (itlist insert l1 l2)) + +(define (setify lst) + (union lst '())) + +(define (Union lst) + (itlist union lst '())) + +(define (notc l2) + (lambda (x) (mem x l2))) + +(define (nonotc l2) + (lambda (x) (not (mem x l2)))) + +(define (intersect l1 l2) + (filter (notc l2) l1)) + +(define (subtract l1 l2) + (filter (nonotc l2) l1)) + +(define (subset l1 l2) + (forall (lambda (t) (mem t l2)) l1)) \ No newline at end of file