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?
的语法if
是:
(if predicate
consequent
optional-alternative)
Run Code Online (Sandbox Code Playgroud)
在您的代码中,consequent
is(evaluate (cdr mylist))
和optional-alternative
is (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)
归档时间: |
|
查看次数: |
175 次 |
最近记录: |