>

이유를 이해하지 못한다     "에이" 과     "비" 코드에서 작동합니까? var를 정의해야합니까?     "에이" 과     "비" 전에     "하다" ?

(define v1 3)
(define v2 2)
(do ((a 1 (+ a v1))
     (b 2 (+ b v2)))
  ((>= a b) (if (= a b) 'YES 'NO)))

  • 답변 # 1

    와이즈 비즈 이후  do 루프에 대한 지역 변수는 다음과 같이 정의됩니다 :

    (do  의미 : 지역 루프 변수 (a 1 (+ a v1)) 정의  시작 값 a  그리고 1 를 할당   (+ a v1) 로  새로운 라운드가 시작될 때

    a  의미 : 지역 루프 변수 (b 2 (+ b v2)) 정의  시작 값 b  그리고 2 를 할당   (+ b v2) 로  새로운 라운드가 시작될 때

    그래, b  그리고 a   b 에 정의되어 있습니다  

  • 답변 # 2

    프로 시저 호출 이외의 제어 흐름 작업이 없습니다. 와이즈 비즈  그냥 매크로입니다. R5RS 보고서는 다음과 같은 구현을 제공합니다.

    do
    
    

    코드는 다음과 같이 변합니다 :

    do
    
    

    (define-syntax do (syntax-rules () ((do ((var init step ...) ...) (test expr ...) command ...) (letrec ((loop (lambda (var ...) (if test (begin (if #f #f) expr ...) (begin command ... (loop (do "step" var step ...) ...)))))) (loop init ...))) ((do "step" x) x) ((do "step" x y) y)))

  • 이전 amazon web services - dynamo db 테이블에 Aws Iot MQTT 메시지를 보내는 방법은 무엇입니까?
  • 다음 javascript - 각도 6 - 외부화 url