增加括号改变条件的评价

问题描述 投票:-2回答:1

我开始学习Scheme,偶然发现了这个奇怪的事情:给定以下过程。

(define (test x y) (if (= x 0) 0 y ))

当我创建一个条件时,当我给它加括号时,它的评估结果是 "如期 "的。(test 0 1) 但当我不加括号时(我使用同样的输入),它的评价是假条件: test 0 1 给出1。

为什么会出现这种情况?

scheme lisp
1个回答
4
投票

如果你写。

test 0 1

这就和..:

(begin
  test ; evaluate variable test => #<procedure:something...> or similar value
  0    ; evaluate literal 0 => 0
  1)   ; evaluate literal 1 => 1
==> 1  ; because 1 is the last expression in the block it is the result of it. 

当你做 (test 0 1) 调用过程,你将通过评估变量 test 与两个参数 01 它们被评估为它们所代表的数字。如果你进行替换,就会变成。

(if (= 0 0) ; if 0 is the same numeric value as 0
    0       ; then evaluate 0
    1)      ; else evaluate 1
==> 0

在JavaScript中也是一样的

const test = (x, y) => x === 0 ? 0 : y;
test;0;1    
==> 1        // result in node is 1 since it was the last expression

test(0, 1); // calling the fucntion behind the variable test with the arguments 0 and 1
==> 0

所以,在JavaScript中,括号对东西的重要性就像它们对东西的重要性一样。基本上 (one two three) 在计划中是 one(two, three) 在JS中。只是在somtheing的周围加上括号,就是直接加上了 () 在JS中的一些东西之后。

© www.soinside.com 2019 - 2024. All rights reserved.