程序代写代做 CMPSC 461: Programming Language Concepts

CMPSC 461: Programming Language Concepts
Prof. G. Tan Spring 2020
1. (define (dncall n f x) (if (= n 0) x
(dncall (- n 1) f (f (f x)))))
2. (define (keep-if f lst) (cond ((null? lst) lst)
((f (car lst)) (cons (car lst) (keep-if f (cdr lst))))
(else (keep-if f (cdr lst)))))
3. (define (least_helper k x) (cond ((null? x) k)
((< k (car x)) (least_helper k (cdr x))) (else (least_helper (car x) (cdr x))))) (define (least x) (least_helper (car x) (cdr x))) 4. (define (to-words n) (cond ((> n 99) ¡¯error)
((< n -99) ¡¯error) ((>= n 0) (nat-to-words n))
(else (cons ¡¯negative (nat-to-words (- n))))))
(define (nat-to-words n)
(let* ((singleDigit
(lambda (n)
(cond ((= n 0) ¡¯(zero))
((= n 1) ¡¯(one))
((= n 2) ¡¯(two))
((= n 3) ¡¯(three))
((= n 4) ¡¯(four))
((= n 5) ¡¯(five))
((= n 6) ¡¯(six))
((= n 7) ¡¯(seven))
1

((= n 8) ¡¯(eight))
((= n 9) ¡¯(nine)))))
(teen (lambda (n)
(cond ((= n 10) ¡¯(ten))
((= n 11) ¡¯(eleven))
((= n 12) ¡¯(twelve))
((= n 13) ¡¯(thirteen))
((= n 14) ¡¯(fourteen))
((= n 15) ¡¯(fifteen))
((= n 16) ¡¯(sixteen))
((= n 17) ¡¯(seventeen))
((= n 18) ¡¯(eighteen))
((= n 19) ¡¯(nineteen)))))
(convert
(lambda (q r)
(let ((i1
(cond ((= q 2) ¡¯(twenty))
((= q 3) ¡¯(thirty))
((= q 4) ¡¯(forty))
((= q 5) ¡¯(fifty))
((= q 6) ¡¯(sixty))
((= q 7) ¡¯(seventy))
((= q 8) ¡¯(eighty))
((= q 9) ¡¯(ninety))))
(i2 (if (= r 0) ¡¯()
(singleDigit r))))
(append i1 i2))))
)
(cond ((and (>= n 0) (< n 10)) (singleDigit n)) ((and (>= n 10) (< n 20)) (teen n)) ((< n 100) (let ((q (quotient n 10)) (r (remainder n 10))) (convert q r))) (else ¡¯(invalid input))))) 5. (define (member? a lst) (cond ((null? lst) #f) 2 ((equal? a (car lst)) #t) (else (member? a (cdr lst))))) (define (filterWords l1 l2) (cond ((null? l1) ¡¯()) ((member? (car l1) l2) (filterWords (cdr l1) l2)) (else (cons (car l1) (filterWords (cdr l1) l2))))) (filterwords ¡¯(time is long but life is short) ¡¯(but)) (filterwords ¡¯(time is long but life is short) ¡¯(but is)) (define (iniWordCountList l) (map (lambda (x) (list x 1)) l)) (iniWordCountList ¡¯(time is long life is short)) (define (mergeWordCounts wcp l) (cond ((null? l) (list wcp)) ((equal? (car wcp) (caar l)) (cons (list (car wcp) (+ (cadr wcp) (cadar l))) (cdr l))) (else (cons (car l) (mergeWordCounts wcp (cdr l)))))) (mergeWordCounts ¡¯(is 1) ¡¯((time 1) (is 1))) (mergeWordCounts ¡¯(life 1) ¡¯((time 1) (is 2))) (define (reduce f l v) (if (null? l) v (f (car l) (reduce f (cdr l) v)))) (define (mergeByWord l) (reduce mergeWordCounts l ¡¯())) (define (relevantWordCount l rl) (mergeByWord (iniWordCountList (filterWords l rl)))) 3