1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | #lang racket ;; Total Order ADT used by Ordered Set ADT ;; Must provide: ;; a membership predicate ;; a total order ;; min and max functions with identities ;; user-defined associative operator and identity ;; ;; any other operations required by the user ;; e.g. to-hide and to-unhide (provide to? to< to<= to> to> to>= to= to!= to-min to-min-ident to-max to-max-ident to-op to-op-ident to-hide to-unhide) ;; For this example, we use a number hidden in a struct (define-struct to-rep (hidden ) #:transparent) (define (to-unhide x) (to-rep-hidden x)) (define (to-hide x) (make-to-rep x)) ;; membership predicate (define (to? x) (and (to-rep? x) (or (string? (to-rep-hidden x))(number? (to-rep-hidden x))))) ;; defining relation must be total, reflexive, transitive (define (to<= a b) (cond [(equal? (to-rep-hidden a) "?") #t] [(equal? (to-rep-hidden b) "+inf.0") #t] [(equal? (to-rep-hidden a) "+inf.0") #f] [(equal? (to-rep-hidden b) "?") #f] [(and (number? (string->number (to-rep-hidden a))) (number? (string->number (to-rep-hidden b)))) (<= (string->number (to-rep-hidden a)) (string->number (to-rep-hidden b)))] [else (string<=? (to-rep-hidden a) (to-rep-hidden b))])) ;; derived relations (define (to> a b) (not (to<= a b))) (define (to= a b) (and (to<= a b) (to<= b a))) (define (to>= a b) (to<= b a)) (define (to< a b) (to> b a)) (define (to!= a b) (not (to= a b))) ;; min/max functions and identities (define (to-min a b) (if (to< a b) a b)) (define to-min-ident (make-to-rep "+inf.0")) (define (to-max a b) (if (to< a b) b a)) (define to-max-ident (make-to-rep "?")) ;; user-defined associative operator and identity ;; for this example we just add the secret numbers (define (to-op a b) (cond [(and (string? a) (string? b)) (to-hide (string-append (to-rep-hidden a) (to-rep-hidden b)))] [else (to-hide (string-append (to-rep-hidden a) (to-rep-hidden b)))])) (define to-op-ident (to-hide "")) |
I2xhbmcgcmFja2V0Cjs7IFRvdGFsIE9yZGVyIEFEVCB1c2VkIGJ5IE9yZGVyZWQgU2V0IEFEVAoKOzsgTXVzdCBwcm92aWRlOgo7OyAgIGEgbWVtYmVyc2hpcCBwcmVkaWNhdGUKOzsgICBhIHRvdGFsIG9yZGVyCjs7ICAgbWluIGFuZCBtYXggZnVuY3Rpb25zIHdpdGggaWRlbnRpdGllcwo7OyAgIHVzZXItZGVmaW5lZCBhc3NvY2lhdGl2ZSBvcGVyYXRvciBhbmQgaWRlbnRpdHkKOzsKOzsgICBhbnkgb3RoZXIgb3BlcmF0aW9ucyByZXF1aXJlZCBieSB0aGUgdXNlcgo7OyAgICAgICBlLmcuIHRvLWhpZGUgYW5kIHRvLXVuaGlkZQoKKHByb3ZpZGUgdG8/IHRvPCB0bzw9IHRvPiB0bz4gdG8+PSB0bz0gdG8hPSB0by1taW4gdG8tbWluLWlkZW50IAogICAgICAgICB0by1tYXggdG8tbWF4LWlkZW50IHRvLW9wIHRvLW9wLWlkZW50IHRvLWhpZGUgdG8tdW5oaWRlKQoKOzsgRm9yIHRoaXMgZXhhbXBsZSwgd2UgdXNlIGEgbnVtYmVyIGhpZGRlbiBpbiBhIHN0cnVjdAoKKGRlZmluZS1zdHJ1Y3QgdG8tcmVwIChoaWRkZW4gKSAjOnRyYW5zcGFyZW50KQooZGVmaW5lICh0by11bmhpZGUgeCkgKHRvLXJlcC1oaWRkZW4geCkpCihkZWZpbmUgKHRvLWhpZGUgeCkgKG1ha2UtdG8tcmVwIHgpKQoKOzsgbWVtYmVyc2hpcCBwcmVkaWNhdGUKCihkZWZpbmUgKHRvPyB4KSAoYW5kICh0by1yZXA/IHgpIChvciAoc3RyaW5nPyAodG8tcmVwLWhpZGRlbiB4KSkobnVtYmVyPyAodG8tcmVwLWhpZGRlbiB4KSkpKSkKCjs7IGRlZmluaW5nIHJlbGF0aW9uIG11c3QgYmUgdG90YWwsIHJlZmxleGl2ZSwgdHJhbnNpdGl2ZQoKCiAgCihkZWZpbmUgKHRvPD0gYSBiKSAKICAoY29uZAogICAgWyhlcXVhbD8gKHRvLXJlcC1oaWRkZW4gYSkgIj8iKSAjdF0KICAgIFsoZXF1YWw/ICh0by1yZXAtaGlkZGVuIGIpICIraW5mLjAiKSAjdF0KICAgIFsoZXF1YWw/ICh0by1yZXAtaGlkZGVuIGEpICIraW5mLjAiKSAjZl0KICAgIFsoZXF1YWw/ICh0by1yZXAtaGlkZGVuIGIpICI/IikgI2ZdCiAgICBbKGFuZCAobnVtYmVyPyAoc3RyaW5nLT5udW1iZXIgKHRvLXJlcC1oaWRkZW4gYSkpKSAobnVtYmVyPyAoc3RyaW5nLT5udW1iZXIgKHRvLXJlcC1oaWRkZW4gYikpKSkKICAgICAgICAgICAgICAgICAgICg8PSAoc3RyaW5nLT5udW1iZXIgKHRvLXJlcC1oaWRkZW4gYSkpIChzdHJpbmctPm51bWJlciAodG8tcmVwLWhpZGRlbiBiKSkpXQogICAgW2Vsc2UgKHN0cmluZzw9PyAodG8tcmVwLWhpZGRlbiBhKSAodG8tcmVwLWhpZGRlbiBiKSldKSkKCjs7IGRlcml2ZWQgcmVsYXRpb25zCihkZWZpbmUgKHRvPiBhIGIpIChub3QgKHRvPD0gYSBiKSkpCihkZWZpbmUgKHRvPSBhIGIpIChhbmQgKHRvPD0gYSBiKSAodG88PSBiIGEpKSkKKGRlZmluZSAodG8+PSBhIGIpICh0bzw9IGIgYSkpCihkZWZpbmUgKHRvPCBhIGIpICh0bz4gYiBhKSkKKGRlZmluZSAodG8hPSBhIGIpIChub3QgKHRvPSBhIGIpKSkKCjs7IG1pbi9tYXggZnVuY3Rpb25zIGFuZCBpZGVudGl0aWVzCgooZGVmaW5lICh0by1taW4gYSBiKSAoaWYgKHRvPCBhIGIpIGEgYikpCihkZWZpbmUgdG8tbWluLWlkZW50IChtYWtlLXRvLXJlcCAiK2luZi4wIikpCgooZGVmaW5lICh0by1tYXggYSBiKSAoaWYgKHRvPCBhIGIpIGIgYSkpCihkZWZpbmUgdG8tbWF4LWlkZW50IChtYWtlLXRvLXJlcCAiPyIpKQoKOzsgdXNlci1kZWZpbmVkIGFzc29jaWF0aXZlIG9wZXJhdG9yIGFuZCBpZGVudGl0eQoKOzsgZm9yIHRoaXMgZXhhbXBsZSB3ZSBqdXN0IGFkZCB0aGUgc2VjcmV0IG51bWJlcnMKCihkZWZpbmUgKHRvLW9wIGEgYikgCiAgKGNvbmQKICAgIFsoYW5kIChzdHJpbmc/IGEpIChzdHJpbmc/IGIpKSAodG8taGlkZSAoc3RyaW5nLWFwcGVuZCAodG8tcmVwLWhpZGRlbiBhKSAodG8tcmVwLWhpZGRlbiBiKSkpXQogICAgW2Vsc2UgKHRvLWhpZGUgKHN0cmluZy1hcHBlbmQgKHRvLXJlcC1oaWRkZW4gYSkgKHRvLXJlcC1oaWRkZW4gYikpKV0pKQoKKGRlZmluZSB0by1vcC1pZGVudCAodG8taGlkZSAiIikpCg==
prog.cpp:1:2: error: invalid preprocessing directive #lang prog.cpp:18: error: stray ‘#’ in program prog.cpp:32: error: stray ‘#’ in program prog.cpp:33: error: stray ‘#’ in program prog.cpp:34: error: stray ‘#’ in program prog.cpp:35: error: stray ‘#’ in program prog.cpp:2: error: ‘Total’ does not name a type prog.cpp:4: error: ‘Must’ does not name a type prog.cpp:5: error: ‘a’ does not name a type prog.cpp:6: error: ‘a’ does not name a type prog.cpp:7: error: expected constructor, destructor, or type conversion before ‘&&’ token prog.cpp:8: error: expected constructor, destructor, or type conversion before ‘-’ token prog.cpp:10: error: ‘any’ does not name a type prog.cpp:11: error: expected constructor, destructor, or type conversion before ‘.’ token prog.cpp:16: error: expected constructor, destructor, or type conversion before ‘this’ prog.cpp:22: error: ‘membership’ does not name a type prog.cpp:26: error: ‘defining’ does not name a type prog.cpp:40: error: ‘derived’ does not name a type prog.cpp:47: error: expected constructor, destructor, or type conversion before ‘/’ token prog.cpp:55: error: expected constructor, destructor, or type conversion before ‘-’ token prog.cpp:57: error: expected unqualified-id before ‘for’
-
result: Compilation error (maybe you wish to see an example for C++ 4.7.2)


