我无法理解此函数中的返回行。
我正在用 C# 创建一个解析器,发现这个教程 ( http://lisperator.net/pltut/parser/the-parser ) 是用 Javascript 编写的。看不懂函数的返回行
function is_punc(ch) {
var tok = input.peek();
return tok && tok.type == "punc" && (!ch || tok.value == ch) && tok;
}
我相信它会在以下情况下返回 true:tok 不为 null 且其类型为 punc AND(char ch 不为 null 或 tok 的值等于 ch)且 tok 不为 null。
如果我没看错,为什么他两次评估 tok is not null。
最佳答案
在这种情况下它没有意义,但 JavaScript 中的逻辑运算符与 Python 和 Lisp 中的逻辑运算符一样工作(在这个问题中与 Lisp 的唯一联系)。
即a && b
返回 a
如果是“false-y”,否则返回 b
.
同样,a || b
返回 a
如果它是“truth-y”,否则返回 b
.
示例(来 self 的 Firefox 控制台):
> "" && 23
< ""
> 0 && 23
< 0
> 1 && 23
< 23
> 1 && "hello"
< "hello"
> "hello" || "world"
< "hello"
> 0 || "world"
< "world"
这意味着最后的 tok
如果所有其他条件都为真,则使函数返回 token 本身。
关于javascript - 需要帮助理解这个 lisp 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56405321/