2016-09-12 1 views
1

나는 녹색, 노란색 또는 빨간색과 어떤 문자열이 두 문자열에 따라 교통 신호등의 사진을 출력왜이 코드는 라켓에 메모리 부족 오류 코드가 부족합니까?

(define green-light 
    (overlay (above (circle 15 "solid" "green") 
        (circle 15 "outline" "yellow") 
        (circle 15 "outline" "red")) 
      (rectangle 50 100 "outline" "black"))) 

(define yellow-light 
    (overlay (above (circle 15 "outline" "green") 
        (circle 15 "solid" "yellow") 
        (circle 15 "outline" "red")) 
      (rectangle 50 100 "outline" "black"))) 

(define red-light 
    (overlay (above (circle 15 "outline" "green") 
        (circle 15 "outline" "yellow") 
        (circle 15 "solid" "red")) 
      (rectangle 50 100 "outline" "black"))) 

(check-expect (TrafficLightState "green") 
       (overlay (above (circle 15 "solid" "green") 
           (circle 15 "outline" "yellow") 
           (circle 15 "outline" "red")) 
         (rectangle 50 100 "outline" "black"))) 

(check-expect (TrafficLightState "yellow") 
       (overlay (above (circle 15 "outline" "green") 
           (circle 15 "solid" "yellow") 
           (circle 15 "outline" "red")) 
         (rectangle 50 100 "outline" "black"))) 
(check-expect (TrafficLightState "red") 
       (overlay (above (circle 15 "outline" "green") 
           (circle 15 "outline" "yellow") 
           (circle 15 "solid" "red")) 
         (rectangle 50 100 "outline" "black"))) 


(define (TrafficLightState color) 
    (cond [(TrafficLightState "green") (place-image green-light)] 
     [(TrafficLightState "yellow") (place-image yellow-light)] 
     [(TrafficLightState "red") (place-image red-light)])) 
+0

숙제와 관련된 것 같습니다. "How to Design Programs"에 기반한 수업을 듣고 있다면 디자인 레시피의 어떤 단계를 말해 줄 수 있습니까? –

+0

헤더 부분 그냥 모양을 사용하여 신호등을 만들 필요가 있고 문제가 발생했습니다. 수표가 예상대로 작동하므로 혼동을 일으킬 수 있습니다. 이유는 무엇입니까? – user6824158

+1

오? 좋습니다, 그 경우에는 어떤 목적 진술도 보이지 않습니다. 그들을 추가 할 수 있습니까? –

답변

2

문제는 당신 TrafficLightState 기능에 고체 인 전구를 결정하는 (고화질)을 작성해야합니다.

그 모든 화살표가 가리 : 당신은 "구문 확인"버튼을 클릭하고 DrRacket에서 그 이름 위에 마우스를 올려 놓으면, 당신은 뭐가 잘못에 대한 힌트의 무언가를 볼 수 있습니다 TrafficLightState 기능이 인 곳은이며 실제로는 번 내부에 번 사용됩니다. 즉, TrafficLightState 함수는 자신을 호출합니다.이 함수는 순환 함수로 알려져 있습니다.

TrafficLightState은 계속해서 호출하므로 무한 루프가되어 효과가 없어 질 때까지 더 많은 메모리를 소비합니다. 이것은 분명히 원하는 것이 아니기 때문에, cond이 작동하는 방식을 다시 생각해보고 기능을 조정하여 그에 맞게 수정해야합니다.

DrRacket의 스테퍼를 사용하여 진행 상황을 정확히 파악하는 데 도움이 될 수 있습니다. 메뉴에서 "단계"단추를 클릭하고 화살표를 클릭하여 한 번에 한 단계 씩 프로그램 실행을 이동하십시오.

+1

DrRacket에 내장 된 스테퍼가 여기에 무슨 일이 일어나는지 이해하는 데 도움이 될 것 같습니다. (... 그 저자가 말했다). –

+0

@JohnClements 아, 항상 스테퍼에 대해 잊어 버렸습니다. 주로 스테로워를 잊어 버렸습니다. 왜냐하면 실제로는 결코 HtDP를 통과하지 못했기 때문에 결코 사용할 수 없었기 때문입니다. 그래도 정말 멋지다. 그래서 나는 그것에 대한 노트를 나의 대답에 확실히 추가 할 것이다. –

+1

교시 언어에서 화살표는 구문 확인 버튼을 눌렀을 때만 나타납니다. –