Как вы останавливаетесь во внедрении DrScheme R5RS? - PullRequest
2 голосов
/ 23 марта 2009

При использовании DrScheme с R5RS функция ошибок отсутствует. Я планирую написать свой, но не могу понять, как остановить выполнение программы. Я пробовал такие команды, как:

  • (остановка)
  • (выход)
  • (ошибка)

и никто не работал. Как вы останавливаете выполнение программы?

Ответы [ 3 ]

2 голосов
/ 23 марта 2009

SLIB (переносимая библиотека Scheme) имеет реализацию ERROR. Возможно, вы захотите либо посмотреть на это, либо использовать SLIB в своих программах.

Кроме этого, один из способов остановить программу - просто вызвать другую ошибку! Попробуйте что-то вроде этого (спасибо Stephen Houben ):

(define (error reason . args)
      (display "Error: ")
      (display reason)
      (for-each (lambda (arg) 
                  (display " ")
          (write arg))
        args)
      (newline)
      (scheme-report-environment -1))  ;; we hope that this will signal an error

Хотя это вызывает вторую (не связанную) ошибку, это, безусловно, остановит выполнение программы.

0 голосов
/ 09 марта 2015

Уродливое решение - определить прерывание, чтобы оно стало ошибкой во время выполнения. например, любой из них должен сделать свое дело (define abort "the program was aborted") (define abort 123) (define abort #f) любой вызов, чтобы прервать (abort) должен генерировать ошибку во время выполнения, если вам повезет даже показать строку, код ошибки или все, что вам нужно.

0 голосов
/ 24 марта 2009

Есть ли причина, по которой вам нужно использовать R5RS? Другие определения языка в DrScheme определяют error и exit. Например, язык (module ...) PLT определяет error и exit. Вызов mzscheme из командной строки также дает вам эти определения.

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

...