Javascript 需要帮助理解这个lisp函数吗
我无法理解此函数中的返回线 我正在用C#创建一个解析器,并找到了这个用Javascript编写的教程()。我无法理解函数的返回行Javascript 需要帮助理解这个lisp函数吗,javascript,c#,Javascript,C#,我无法理解此函数中的返回线 我正在用C#创建一个解析器,并找到了这个用Javascript编写的教程()。我无法理解函数的返回行 function is_punc(ch) { var tok = input.peek(); return tok && tok.type == "punc" && (!ch || tok.value == ch) && tok; } 我相信如果:tok不为null,其类型为punc和(char ch不
function is_punc(ch) {
var tok = input.peek();
return tok && tok.type == "punc" && (!ch || tok.value == ch) && tok;
}
我相信如果:tok不为null,其类型为punc和(char ch不为null或tok的值等于ch),并且tok不为null,则返回true
如果我读对了,为什么他要两次计算tok不为null。这在本文中没有意义,但JavaScript中的逻辑运算符与Python和Lisp中的逻辑运算符类似(在这个问题中,与Lisp的唯一连接) 也就是说,
a和&b
如果是“false-y”,则返回a
,否则返回b
类似地,
a | | b
如果是“truth-y”,则返回a
,否则返回b
示例(来自我的Firefox控制台):
“&&23
< ""
> 0 && 23
< 0
> 1 && 23
< 23
>1&&“你好”
<“你好”
>“你好”| |“世界”
<“你好”
>0 | |“世界”
<“世界”
这意味着,如果所有其他条件都是真值y,则最终的
tok
使函数返回标记本身。您可以使用超过true/false
的值来表示布尔逻辑,一些语言利用此值从布尔运算符返回更多信息。例如,在JS控制台中,您可以编写以下内容:
> x = 10
10
> (x < 100) && x
10
>x=10
10
>(x<100)和&x
10
在布尔上下文中使用时,像10这样的整数属于真值集。因此,结果是10。
同样的情况也发生在Lisp中,(或者(首先尝试这个)(可能是那个))
的计算结果是第一个正确的表达式
在您的情况下,最后一个术语是函数返回令牌所必需的。您显示的代码不是lisp。。。它似乎是JS。我也找不到你在链接中显示的功能。在页面底部附近有一个标记为“显示代码”的按钮。你的权利是Javascript,你是对的
tok
无需检查两次。您的评估在我看来是正确的:最终的和&tok
没有任何作用
> x = 10
10
> (x < 100) && x
10