小编moo*_*ose的帖子

为什么 Haskell 不允许更复杂的中缀表达式?

为什么 Haskell 不允许更复杂的中缀表达式,例如。

xs `zipWith (+)` ys
l `f 0 0` r
Run Code Online (Sandbox Code Playgroud)

它似乎至少从 2007 年就开始浮动

此页面表明这是由于解析嵌套中缀表达式的问题,例如。

x `a `f` b` y
Run Code Online (Sandbox Code Playgroud)

但我还没有找到任何关于它的讨论的“官方”来源。这绝对是原因吗,它是否排除了我们目前拥有的以外的任何东西?显然,一个简单的解决方案是允许任何本身不包含任何中缀符号的表达式,但这是否太临时了?这种歧义是编译器无法克服的,还是简单地认为任何潜在的收益都不值得付出努力?我无法立即想到一个可比较的结构,即。其中“开始”和“结束”标记是相同的,因此它是否是一个已解决的问题。

compiler-construction haskell types type-inference

2
推荐指数
1
解决办法
113
查看次数

'const' 关键字改变语义

我在 C++ 中尝试了今天的 leetcode 挑战。你必须在二叉树中找到表亲。这是我的代码。

template<class... Ts> struct overloaded : Ts... { using Ts::operator()...; };
template<class... Ts> overloaded(Ts...) -> overloaded<Ts...>;

class Solution {
public:
    bool isCousins(TreeNode* root, int x, int y) {
        this->x = x;
        this->y = y;
        return visit(overloaded{
            [](const bool& r) { 
                return r; 
            },
            [](const optional<int>& r) { 
                return false; 
            }
        }, helper(root));
    }

private:
    int x;
    int y;

    variant<const bool, optional<int>> helper(TreeNode* node) {
        if (node == nullptr) {
            return variant<const bool, optional<int>>((optional<int>()));
        } …
Run Code Online (Sandbox Code Playgroud)

c++ constants

0
推荐指数
1
解决办法
57
查看次数