;; DO NOT PUT ANYTHING PERSONALLY IDENTIFYING BEYOND YOUR CWL IN THIS
FILE.
;; YOUR CWLs WILL BE SUFFICIENT TO IDENTIFY YOU.
;;
(require spd/tags)
(@assignment psets/pset-07); Do not edit or remove this tag
(@problem 1)
;; There is a primitive type called 1String, defined as follows:
;;
;; 1String is String
;; interp. a 1String represents a single letter
;; CONSTRAINT: any 1String is only one letter long
( @htdd ListOf1String)
;; ListOf1String is one of:
;; - empty
;; - (cons 1String ListOf1String)
;; interp. a sequence of letters
( define L1 empty)
(define L2 (list "a" "B" "c"))
( @htdd Operations)
;; Operations is one of:
;; - empty
;; - (cons "keep" Operations)
;; - (cons "space" Operations)
;; - (cons "remove" Operations)
;; interp. a sequence of operations to apply to a list of 1String
;; "keep" means keep the corresponding letter
;; "space" means replace the corresponding letter with a " "
;; "remove" means remove the corresponding letter
( @htdf decoder)
(@signature ListOf1String Operations -> String)
;; produce string containing letters in l with operations applied
(check-expect (decoder empty empty) "")
(check-expect (decoder empty (list "keep")) "")
(check-expect (decoder empty (list "space")) "")
(check-expect (decoder empty (list "remove")) "")
(check-expect (decoder (list "h" "i") empty) "hi")
(check-expect (decoder (list "h" "o" "w") (list "keep" "keep" "keep"))
"how")
(check-expect (decoder (list "o" "h") (list "space" "space"))
, " ")
(check-expect (decoder (list "a" "d" "d") (list "remove" "remove"))
"d")
(check-expect (decoder (list "i" "k" "l" "h" "a" "m" "k" "s" "a" "r" "m")
(list "keep" "remove" "remove" "space" "keep" "keep"
"space" "keep" "keep" "remove" "keep"))
"i am sam")
(check-expect (decoder (list "e" "s" "r" "a" "m" "d" "i" "f" "a" "m")
(list "remove" "keep" "remove" "keep" "keep" "space"
"keep" "space"))
"sam i am")
|
#
CROSS PRODUCT OF TYPE-COMMENTS TABLE
l-> empty (cons 1String ListOf1String)
ops
empty (string-append (first l) ;(2)
(decoder (rest l)
empty))
(cons "keep" "" (1) (string-append (first l) ;(3)
Operations) (decoder (rest l)
(rest ops)))
(cons "space" (string-append " " ;(4)
Operations) (decoder (rest l)
(rest ops)))
(cons "remove" (decoder (rest l) (rest ops)) ;(5)
Operations)
|#
(@template-origin 2-one-of)
(define (decoder l ops)
(cond [(empty? l) ""] ;(1)
[(empty? ops) ;(2)
(string-append (first l)
(decoder (rest l)
empty))]
FILE.
;; YOUR CWLs WILL BE SUFFICIENT TO IDENTIFY YOU.
;;
(require spd/tags)
(@assignment psets/pset-07); Do not edit or remove this tag
(@problem 1)
;; There is a primitive type called 1String, defined as follows:
;;
;; 1String is String
;; interp. a 1String represents a single letter
;; CONSTRAINT: any 1String is only one letter long
( @htdd ListOf1String)
;; ListOf1String is one of:
;; - empty
;; - (cons 1String ListOf1String)
;; interp. a sequence of letters
( define L1 empty)
(define L2 (list "a" "B" "c"))
( @htdd Operations)
;; Operations is one of:
;; - empty
;; - (cons "keep" Operations)
;; - (cons "space" Operations)
;; - (cons "remove" Operations)
;; interp. a sequence of operations to apply to a list of 1String
;; "keep" means keep the corresponding letter
;; "space" means replace the corresponding letter with a " "
;; "remove" means remove the corresponding letter
( @htdf decoder)
(@signature ListOf1String Operations -> String)
;; produce string containing letters in l with operations applied
(check-expect (decoder empty empty) "")
(check-expect (decoder empty (list "keep")) "")
(check-expect (decoder empty (list "space")) "")
(check-expect (decoder empty (list "remove")) "")
(check-expect (decoder (list "h" "i") empty) "hi")
(check-expect (decoder (list "h" "o" "w") (list "keep" "keep" "keep"))
"how")
(check-expect (decoder (list "o" "h") (list "space" "space"))
, " ")
(check-expect (decoder (list "a" "d" "d") (list "remove" "remove"))
"d")
(check-expect (decoder (list "i" "k" "l" "h" "a" "m" "k" "s" "a" "r" "m")
(list "keep" "remove" "remove" "space" "keep" "keep"
"space" "keep" "keep" "remove" "keep"))
"i am sam")
(check-expect (decoder (list "e" "s" "r" "a" "m" "d" "i" "f" "a" "m")
(list "remove" "keep" "remove" "keep" "keep" "space"
"keep" "space"))
"sam i am")
|
#
CROSS PRODUCT OF TYPE-COMMENTS TABLE
l-> empty (cons 1String ListOf1String)
ops
empty (string-append (first l) ;(2)
(decoder (rest l)
empty))
(cons "keep" "" (1) (string-append (first l) ;(3)
Operations) (decoder (rest l)
(rest ops)))
(cons "space" (string-append " " ;(4)
Operations) (decoder (rest l)
(rest ops)))
(cons "remove" (decoder (rest l) (rest ops)) ;(5)
Operations)
|#
(@template-origin 2-one-of)
(define (decoder l ops)
(cond [(empty? l) ""] ;(1)
[(empty? ops) ;(2)
(string-append (first l)
(decoder (rest l)
empty))]