language: C++ 4.7.2 (gcc-4.7.2)
date: 436 days 1 hour ago
link:
visibility: public
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 ""))
 
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’