标签: associativity

用反向关联中缀表示法部分应用curried函数的语法

换句话说,有没有一个很好的理由为什么不应该编译?

def f(xs: List[Int]) = xs.foldLeft(0) _  // OK
def f(xs: List[Int]) = (xs :\ 0) _       // OK
def f(xs: List[Int]) = (0 /: xs) _

<console>:15: error: missing arguments for method /: in trait TraversableOnce;
follow this method with `_' if you want to treat it as a partially applied function
Run Code Online (Sandbox Code Playgroud)

以下是一些解决方法:

def f(xs: List[Int]) = xs./:(0) _
def f(xs: List[Int]): ((Int, Int) => Int) => Int = (0 /: xs)
Run Code Online (Sandbox Code Playgroud)

但我的问题主要是关于一般的正确语法.

scala infix-notation currying partial-application associativity

5
推荐指数
1
解决办法
910
查看次数

这个PHP函数返回什么?

public function add($ child){return $ this-> children [] = $ child; }

顺便说一句,这是Dagfinn Reiersol的PHP in Action的摘录.根据这本书,这会返回$ child,但是如果成功分配则不应该返回true,否则返回false?

提前致谢

php function return-value associativity

4
推荐指数
1
解决办法
165
查看次数

为什么不同的运营商有不同的关联性?

我已经阅读了Ruby编程语言中有关运算符的部分,这让我想到了运算符关联性.顺便说一下,这不是一个Ruby问题 - 它适用于所有语言.

我知道运营商必须以某种方式关联,我可以看到为什么在某些情况下,一种方式会优于另一种方式,但我很难看到更大的图景.语言设计者是否有一些标准用来决定从左到右应该从哪里做什么?从右到左应该做什么?在某些情况下,它"只是有意义",因为它只是一种方式,而其他情况只是一种武断的决定吗?或者这背后有一些宏伟的设计?

language-agnostic programming-languages operators associativity

4
推荐指数
1
解决办法
252
查看次数

为什么是$!运算符右关联?

我只是在学习Haskell,而且我还不完全清楚何时以及如何严格评估

当我想要一个函数来严格评估它的参数时,我发现自己在写作

((f $! x) $! y ) $! z
Run Code Online (Sandbox Code Playgroud)

这看起来很奇怪.不应该$!是左联想所以我可以写

f $! x $! y $! z
Run Code Online (Sandbox Code Playgroud)

并让它做我想要的?

我完全误解了$!运营商?

haskell lazy-evaluation associativity

4
推荐指数
2
解决办法
413
查看次数

Python中比较运算符的结合性

Python 中比较运算符的结合性是什么?三个比较很简单,但除此之外,我不确定它是如何做到的。它们似乎不是右关联或左关联。

例如:

>>> 7410 >= 8690 <= -4538 < 9319 > -7092        
False    
>>> (((7410 >= 8690) <= -4538) < 9319) > -7092 
True
Run Code Online (Sandbox Code Playgroud)

所以,不是左结合。

>>> 81037572 > -2025 < -4722 < 6493           
False
>>> (81037572 > (-2025 < (-4722 < 6493)))     
True
Run Code Online (Sandbox Code Playgroud)

所以它也不是右结合的。

我已经看到一些地方被“链接”了,但是这如何与四个或更多的比较一起工作?

python comparison associativity comparison-operators

4
推荐指数
2
解决办法
530
查看次数

整数溢出和操作顺序

我最近遇到了一个关于我的C++代码的问题让我想知道我是否对编译器对长操作有什么误解...看看下面的代码:

#include <iostream>

int main() {
    int i = 1024, j = 1024, k = 1024, n = 3;
    long long l = 5;
    std::cout << i * j * k * n * l << std::endl;  // #1
    std::cout << ( i * j * k * n ) * l << std::endl; // #2
    std::cout << l * i * j * k * n << std::endl;  // #3
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

对我来说,在这3行中的任何一行中发生乘法的顺序是不确定的.但是,这是我认为会发生的事情(假设int是32b,long long是64b,它们都遵循IEEE规则): …

c++ operators multiplication associativity language-lawyer

4
推荐指数
1
解决办法
120
查看次数

三元运算符结合性

我无法理解三元运算符上下文中的结合性概念。在大多数情况下,三元运算符如下所示:

a ? b : c
Run Code Online (Sandbox Code Playgroud)

在这种情况下,不需要结合性来计算表达式。但有时,三元运算符是嵌套的:

a ? b : c ? d : e
a ? b : (c ? d : e) // : is right-associative
Run Code Online (Sandbox Code Playgroud)

然而,嵌套也可以颠倒过来

a ? b ? c : d : e
a ? (b ? c : d) : e // : is left-associative
Run Code Online (Sandbox Code Playgroud)

解释这一现象的最佳方法是什么?您是否可以认为运算符的关联性:取决于上下文,或者我在这里遗漏了一些东西?

当人们想要定义自己的三元运算符时,结合性问题就变得相关了,例如在 Swift 中:

infix operator ? { associativity right precedence 120 }
infix operator : { associativity left precedence 130 }
Run Code Online (Sandbox Code Playgroud)

operators ternary-operator associativity swift

4
推荐指数
1
解决办法
2613
查看次数

XPath 中运算符的优先级是什么?

在此 XPath 表达式: 中//div[@id=\xe2\x80\x9dmyID\xe2\x80\x9d]|p//运算符是否应用于并集运算符的两侧?或者这个表达式只是返回div文档中id属性值为myID和 all的所有元素p作为上下文节点的子元素的所有元素吗?

\n\n

是否有关于 XPath 运算符绑定和关联性的参考?

\n

xml xpath operator-precedence associativity

4
推荐指数
1
解决办法
1987
查看次数

C++ STL字符串运算符+关联性

我在VC++ 2015中尝试了以下代码

#include <iostream>
#include <string>

using namespace std;

int foo(int v)
{
    cout << v << endl;
    return 10;
}

string bar(int v)
{
    cout << v << endl;
    return "10";
}

int main()
{
    auto a = foo(1) + foo(2) + foo(3);
    auto b = bar(10) + bar(20) + bar(30);
    cout << "----" << endl << a << endl << b << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

控制台上的结果如下

1
2
3
30
20
10
----
30
101010
Run Code Online (Sandbox Code Playgroud)

众所周知,二元+运算符具有从左到右的关联性,并且可以通过3次调用来确认foo …

c++ operator-precedence associativity

4
推荐指数
1
解决办法
179
查看次数

运算符结合性、结合律和 monad 的值依赖性如何结合在一起?

一方面,一元绑定运算符>>=是左结合的(AFAIK)。另一方面,monad 定律需要结合性,即评估顺序无关紧要(就像幺半群一样)。此外,monads 通过使下一个效果依赖于前一个效果的结果来编码值依赖,即 monads 有效地确定评估顺序。这对我来说听起来很矛盾,这显然意味着我对所涉及概念的心理表征是错误的。这一切是如何结合在一起的?

monads haskell functional-programming associativity monoids

4
推荐指数
1
解决办法
170
查看次数