方案 if 语句。为什么这个显示语句没有运行?

Gre*_*reg 1 lisp scheme functional-programming

我正在运行以下代码:

(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))
Run Code Online (Sandbox Code Playgroud)

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

Bar*_*mar 5

的语法if是:

(if predicate
    consequent
    optional-alternative)
Run Code Online (Sandbox Code Playgroud)

在您的代码中,consequentis(evaluate (cdr mylist))optional-alternativeis (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))
  )

)
Run Code Online (Sandbox Code Playgroud)