;; very simple unit test function
(define (check-equal expected actual str)
(define (!= a b) (not (= a b)))
(if (!= expected actual)
(display (string-append
"\n check failed! \n""[" str "] \nexpected != actual\n "
(number->string expected)
" != "
(number->string actual)
"\n"))))
;(check-equal 1 2 "test1 for tester");(check-equal 1 1 "test2 for tester"); ver-1
(define (square-sum-larger a b c)
(define sum (+ (* a a) (* b b) (* c c)))
(define min (if (< a b)
(if (< a c) a c)
(if (> b c) c b)))
(- sum (* min min)))
; ver-2
(define (square-sum-larger a b c)
(define sum (+ (* a a) (* b b) (* c c)))
(define (get-min min args)
(if (null? args)
min
(if (< min (car args))
(get-min min (cdr args))
(get-min (car args) (cdr args)))))
(define min (get-min a (list a b c)))
(- sum (* min min)))
;;======================= test-cases =======================
(check-equal (square-sum-larger 111) (+ 11) "all same")
(check-equal (square-sum-larger 113) (+ 19) "two same 1")
(check-equal (square-sum-larger 131) (+ 19) "two same 2")
(check-equal (square-sum-larger 311) (+ 19) "two same 3")
(check-equal (square-sum-larger 138) 73"1.1")
(check-equal (square-sum-larger 183) 73"1.2")
(check-equal (square-sum-larger 318) 73"3.1")
(check-equal (square-sum-larger 381) 73"3.2")
(check-equal (square-sum-larger 831) 73"8.1")
(check-equal (square-sum-larger 813) 73"8.2")
게에에에에엑
데슾보다 리슾이 더 재밌네
ㅎㅎ;
댓글 7
얌마 이러니까 주석이 필요하지. 제대로 하려면 숫자에 대해 square, 임의의 리스트에 대해 sum, 임의의 리스트를 정렬한 다음 처음 n개를 뽑는 sort-then-pick-n 이렇게 주석을 없애는 거여
얌마 이러니까 주석이 필요하지. 제대로 하려면 숫자에 대해 square, 임의의 리스트에 대해 sum, 임의의 리스트를 정렬한 다음 처음 n개를 뽑는 sort-then-pick-n 이렇게 주석을 없애는 거여
그 생각을 했지만 귀찮아서 안 했읍니다.. 문법을 더 알아야될 거 같아요
(sort-then-pick > '(5 6 3) 2) 이런거 아니냐
문법이라 해야되나.. 여튼 지금 잘 알지도 못하는데 하려니까 너무 개노가다라서 포기
이런거 배우는게 sicp 인디??!!
아직 1장 보는 중이에요 ㅋㅋ;
ver-2 저게 pl 시간에 scheme 살짝 배운 걸로 어떻게든 만들어본 거고요...