Scheme if 语句。为什么这个显示语句不是运行?

Scheme if statement. Why does this display statement not run?

我正在运行宁以下代码:

(define (myignore x)
    0
)
(define (myinterpreter mylist)
  (evaluate mylist)
)

(define (evaluate mylist)

  (if (eqv? (car mylist) 'prog)
    (evaluate (cdr mylist))
    (display (integer? (car mylist)))
    (if (integer? (car mylist))
      (display "YESSS")
    )
  )

  (if (eqv? (car mylist) 'myignore)
    (myignore (cdr mylist))
  )

)

(myinterpreter '(prog 5))

我想知道为什么包含 (display ("YESSS")) 的行不 运行 尽管 (display (integer? (car mylist))) 在 [= 行之前等于 true 17=]s?

if的语法是:

(if predicate
    consequent
    optional-alternative)

在您的代码中,consequent(evaluate (cdr mylist))optional-alternative(display (integer? (car mylist)))。之后的所有内容都将被忽略。

如果要执行多个表达式,则必须将它们包装在begin

(define (evaluate mylist)

  (if (eqv? (car mylist) 'prog)
    (evaluate (cdr mylist))
    (begin 
      (display (integer? (car mylist)))
      (if (integer? (car mylist))
        (display "YESSS")
      )
    )
  )

  (if (eqv? (car mylist) 'myignore)
    (myignore (cdr mylist))
  )

)