디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

well-formed-expr? 생각보다 어렵넹..

fp빠돌이갤로그로 이동합니다. 2010.11.23 13:02:10
조회 105 추천 0 댓글 7

한시간이나 풀었네 점심시간 물어내.

전공자가 아니라서 그러는데 이렇게 풀면 너무 느리고 못생겨서 안되는거야?


#lang racket
(require test-engine/racket-tests)
(define parens
  \'((#\\< . #\\>) (#\\( . #\\)) (#\\{ . #\\}) (#\\[ . #\\])))
(define (open-paren? char)
  (not (false? (member char (map car parens)))))
(define (close-paren? char)
  (not (false? (member char (map cdr parens)))))
(define (paren? char)
  (or (open-paren? char) (close-paren? char)))
(define (matched-paren? char-key char-value)
  (equal? (cdr (assoc char-key parens)) char-value))
                              
(define (well-formed? expr)
  (letrec ([paren-match? (λ(expr prev-paren paren-count)
                           (cond [(and (null? expr) (= paren-count 0)) true]
                                 [(and (null? expr) (not (= paren-count 0))) false]
                                 [(and (null? prev-paren) (close-paren? (car expr))) false]
                                 [(not (paren? (car expr))) 
                                  (paren-match? (cdr expr) prev-paren paren-count)]
                                 [(open-paren? (car expr)) 
                                  (paren-match? (cdr expr) (cons (car expr) prev-paren) (add1 paren-count))]
                                 [(matched-paren? (car prev-paren) (car expr)) 
                                  (paren-match? (cdr expr) (cdr prev-paren) (sub1 paren-count))]
                                 [else false]))])
    (paren-match? (string->list expr) \'() 0)))

(check-expect true (well-formed? ""))
(check-expect true (well-formed? " "))
(check-expect true (well-formed? "a"))
(check-expect true (well-formed? "<> () {} []"))
(check-expect true (well-formed? "[({ } ) ]"))
(check-expect true (well-formed? "[({ <({})>})]"))
(check-expect true (well-formed? "[a{b<c(d)>}]"))

(check-expect true (well-formed? "[(a + b) - (a * b -( c + d))] | [{b<c(d)>}]"))

(check-expect false (well-formed? "((())"))
(check-expect false (well-formed? "<<(>>>"))
(check-expect false (well-formed? "{[}]"))
(check-expect false (well-formed? "(abcd>"))
(check-expect false (well-formed? "[(a + b) - (a * b -( c + d)))] | [{b<c(d)>}]"))

(test)

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 힘들게 성공한 만큼 절대 논란 안 만들 것 같은 스타는? 운영자 24/06/10 - -
232075 ((필독))횽들 비전공자가 들으며 좋은 컴공 수업!! [12] 쉐이킷(123.143) 11.01.24 251 0
232074 노트북중에 말이야 [1] sdfd(61.106) 11.01.24 72 0
232073 야이생키들아 [2] 핫바리(1.99) 11.01.24 85 0
232072 마인크래프트 제작에 쓰인 코드가 몇라인인지 밝혀졌음 [4]    갤로그로 이동합니다. 11.01.24 253 0
232071 레벨디자인(Level Design) 에 대한 고찰 [2] 한마음택배갤로그로 이동합니다. 11.01.24 116 0
232069 살인적이다... [4] 돌아온yoi(124.153) 11.01.24 129 0
232068 안드로이드 구글맵 마커 죤나 많을 때 어캐 쳐리하나요? [3] ㅇㄴㄹ(125.7) 11.01.24 400 0
232067 방학때와 개학때의 차이점 nRESET(211.54) 11.01.24 114 0
232066 자바 하루만 공부해도 마인크래프트 플러그인 만들기 어렵지는 않던데 ㄷㄷ [1] 젤리클갤로그로 이동합니다. 11.01.24 3338 5
232065 상대방아디해킹하는 웹해킹어떤책을 봐야 그나마 쉽게 익힐수있냐? [4] 1Q 430갤로그로 이동합니다. 11.01.24 212 0
232063 쩜오볼트 소환 nRESET(211.54) 11.01.24 40 0
232062 (꾸준글) for 루프가 for..in 루프보다 좋은 이유 [3] kushan갤로그로 이동합니다. 11.01.24 132 0
232061 타자 800타 나오면 뭐해먹을수 있나요? [3] 뿡뿡이(113.59) 11.01.24 196 0
232059 [혐짤] 올린 유;리한님. [8] new gay[max]갤로그로 이동합니다. 11.01.24 168 0
232058 ant 로 빌드 하기 android 히밤(121.166) 11.01.24 105 0
232057 내 어플은 12위임 냉무 [4] 히밤리눅스갤로그로 이동합니다. 11.01.24 123 0
232056 HTML5 캔버스로 간단하게 RPG게임 만들려고하는데... [12] 초보자갤로그로 이동합니다. 11.01.24 248 0
232055 루비나 파이썬이 느리다는 사람들 [40] 히밤리눅스갤로그로 이동합니다. 11.01.24 342 0
232054 횽들 오랜만에 개념 질문 할께여 [5] 에이스1번갤로그로 이동합니다. 11.01.24 122 0
232053 회사에서 수습기간이라는걸 제시하는거 맞죠?? [3] zz(61.43) 11.01.24 131 0
232052 올리디버거 크랙 하실줄 아는사람 도와주세요 [1] 안녕하세요(121.184) 11.01.24 321 0
232050 형드라 마인크래프트가 뭐임? [2] 분당살람갤로그로 이동합니다. 11.01.24 149 0
232049 아, 해결법 알았다. [2]    갤로그로 이동합니다. 11.01.24 103 0
232048 쉬어가는 코너 [2] nRESET(211.54) 11.01.24 71 0
232047 마인크래프트는 오픈소스입니다. [9]    갤로그로 이동합니다. 11.01.24 321 0
232046 64비트인데 64비트로 설치했는데 안되고 32비트하니까된당 [1] 고게이(221.162) 11.01.24 121 0
232045 한글 파렛트 파일을 씌우는것만으로는 안되겠는데.. [8]    갤로그로 이동합니다. 11.01.24 100 0
232044 횽들 파이썬이 C도 대체가 가능해? [14] 초랭이(221.147) 11.01.24 260 0
232043 세상 모든 분야가 경쟁이 쩌러욬ㅋㅋㅋ 갑자원(58.180) 11.01.24 74 0
232041 아...여태껏 헛되게 공부를 해왔나... [1] ㅅㅂ맨날배고픔갤로그로 이동합니다. 11.01.24 100 0
232040 마인크도 자바고 안드로이드 어플도 자바다. [5]    갤로그로 이동합니다. 11.01.24 179 0
232039 마인크래프트 한글화 채팅 나도 작업중인데 [3]    갤로그로 이동합니다. 11.01.24 503 0
232038 LPD3DXSPRITE 이거 쓰는사람 있음?? 달걀소년갤로그로 이동합니다. 11.01.24 147 0
232037 마인크래프트 한글화채팅....... [6] 고게이(221.162) 11.01.24 1491 0
232036 다 필요없어. 필요한것이라곤.. 갑자원(58.180) 11.01.24 65 0
232035 게임제작쪽에 진로를 두고있는데요 질문 몇개.. [5] ㄱㄴㄷ(175.113) 11.01.24 149 0
232033 제가 로또될확률 vs 프로그래머로중소기업취업할확률 vs 공무원시험합격확률 [3] 고3졸업예정(116.39) 11.01.24 173 0
232031 고졸이 대졸 틈바구니에서 살아남을 확률 [3] nRESET(211.54) 11.01.24 168 0
232030 형들 우분투에서 이거 어찌해야함? [3] arx갤로그로 이동합니다. 11.01.24 92 0
232029 테니스 같이 칠 여자 개발자님 구합니다. 테니스짱(174.21) 11.01.24 72 0
232027 전자과는 뭘 공부하면 좋을까요?? [2] 앟앙흥(121.155) 11.01.24 101 0
232026 iljoemobolt 봐라 [1] nRESET(211.54) 11.01.24 85 0
232025 형들 나는 게임업계에서 일하고픈 고3졸업생이야~ [13] 고3졸업예정(116.39) 11.01.24 239 0
232023 진중권 찬양 [8] 물속의다이아갤로그로 이동합니다. 11.01.24 170 0
232022 전형적인 고민형 바보 [5] nRESET(211.54) 11.01.24 131 0
232021 횽들 내 고민 한번 들어볼래욤? [14] 고민닭(112.216) 11.01.24 184 0
232020 조강지처가 좋더라 [1] nRESET(211.54) 11.01.24 105 0
232019 근데 "소스=출력"인 소스 혹시 아는 횽들 없음? [12] ㅇㅇㅇ(121.144) 11.01.24 184 0
232018 그나저나 파이썬은 개사기 ㅡㅡ) [2] 땡칠도사갤로그로 이동합니다. 11.01.24 258 0
232016 냐음 = ω=) 아이패드나 살까 [3] 땡칠도사갤로그로 이동합니다. 11.01.24 122 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2