무냐의 개발일지

[OSSU] <UBCx HtC1x_How to Code> / 7a_Two One-Of Types (여러가지 경우의 수 생각해서 코드 짜기) 본문

OSSU_CS coursework

[OSSU] <UBCx HtC1x_How to Code> / 7a_Two One-Of Types (여러가지 경우의 수 생각해서 코드 짜기)

무냐코드 2024. 5. 6. 18:31

 

| Cross Product Table

경우의 수가 4개가 있고, 그에 대해 일일이 테스트해줘야 한다

 

 

 

 

일단, lsta가 empty인 경우를 하나로 묶을 수 있고

나머지 경우들 (a가 empty가 절대 아닌 경우) 를 다뤄준다!!

 

 

둘 다 list였기 때문에, 이 type comment 가 function의 생김새를 규정지어줬다

 

프로그램 디자이너의 큰 차이점 !!! 

코드를 간결하게 만든다

 

 

 

| P2_ Pattern

너 증말 똑똑하구나!? 한 번에 풀었어!

 

listA의 pattern에 listB가 부합하면 true, 

하나라도 틀리거나, listb가 짧으면 false

 


;;Pattern ListOf1String -> Boolean
;;determine whether ListOf1String matches the types in the pattern
;;if ListOf1String > Pattern, but the first part matches, then True
;;if ListOf1String < Pattern, false
(check-expect (pattern-match? empty empty) true)
(check-expect (pattern-match? empty (list "V")) true)

(check-expect (pattern-match? (list "A") empty) false)
(check-expect (pattern-match? (list "A") (list "V")) true)
(check-expect (pattern-match? (list "N") (list "6")) true)
(check-expect (pattern-match? (list "A" "N" "A") (list "V" "8" "D")) true)

(check-expect (pattern-match? (list "A" "N" "A") (list "V")) false) ;Pattern > ListOf1String
(check-expect (pattern-match? (list "A") (list "V" "8" "D")) true)    ;Pattern < ListOf1String (and first part matches)
(check-expect (pattern-match? (list "A" "N" "A") (list "V" "D" "7")) false)


;(define (pattern-match? p lst) false) ;stub

(define (pattern-match? p lst)
  (cond [(empty? p) true]
        [(empty? lst) false]  ;Pattern > ListOf1String
        [(string=? "A" (first p)) (if (alphabetic? (first lst))
                                      (pattern-match? (rest p) (rest lst))
                                      false)]
        [else
         (if (numeric? (first lst))
             (pattern-match? (rest p) (rest lst))
             false)]))

 

네 가지 경우의 수로 나눴다

pattern 이 empty면 무조건 true

los가 empty면, 무조건 pattern이 더 길어지므로 false

pattern = A 인 경우, 알파벳일때는 다음걸로 진행, 아니면 false

pattern = N 인 경우, 숫자일때는 다음걸로 진행, 아니면 false