Nano Hash - криптовалюты, майнинг, программирование

почему этот код дает мне код ошибки нехватки памяти на ракетке?

Мне нужно создать определение, которое выводит изображение светофора в зависимости от строки зеленого, желтого или красного цвета, и независимо от того, какая строка определяет, какая лампочка не горит

(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)]))

  • Похоже, это связано с домашним заданием. Предполагая, что вы посещаете курс, основанный на «Как разрабатывать программы», можете ли вы рассказать нам, на каком этапе рецепта дизайна вы находитесь? 13.09.2016
  • В части заголовка мне просто нужно создать стоп-сигнал, используя фигуры, и у меня возникли проблемы с тем, что мои проверки-ожидания сработали, поэтому я не понимаю, почему этого не произошло, потому что это тот же код. 13.09.2016
  • Ой? Ладно, в таком случае я не вижу никаких заявлений о целях. Не могли бы вы добавить их? 13.09.2016

Ответы:


1

Проблема в вашей функции TrafficLightState. Если вы нажмете кнопку «Проверить синтаксис» и наведете курсор на его название в DrRacket, вы увидите что-то вроде подсказки о том, что с ним не так:

Все эти стрелки указывают на места, где функция TrafficLightState используется, и действительно, она используется трижды внутри самой себя. То есть функция TrafficLightState вызывает сама себя, что называется рекурсивной функцией.

Поскольку TrafficLightState продолжает вызывать сам себя, он фактически входит в бесконечный цикл, потребляя все больше и больше памяти, пока не закончится. Это определенно не то, что вам нужно, поэтому вам следует пересмотреть способ cond работает и настройте свою функцию, чтобы исправить это соответствующим образом.

Может помочь использование степпера в DrRacket для пошагового выполнения вашей программы, чтобы точно понять, что происходит. Нажмите кнопку «Шаг» в меню и нажимайте стрелки, чтобы перемещаться по выполнению вашей программы по одному шагу за раз.

12.09.2016
  • Я считаю, что степпер, встроенный в DrRacket, может помочь вам понять, что здесь происходит. (...сказал ее автор). 13.09.2016
  • @JohnClements Ах, я всегда забываю о степпере, в основном потому, что я никогда не проходил через HtDP, поэтому он никогда не был мне доступен. Это действительно круто, поэтому я обязательно добавлю примечание об этом в свой ответ. 13.09.2016
  • Вы должны упомянуть, что на языках обучения эти стрелки видны только тогда, когда вы нажимаете кнопку «Проверить синтаксис». 13.09.2016
  • @AlexKnauth А, хорошая мысль. Отмечено и упомянуто в ответе. 13.09.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..