标签: infix-operator

如何检查Haskell中缀运算符优先级

我可以在GHCi中看到中缀运算符的类型:t如下:

>:t (.)
(.) :: (b -> c) -> (a -> b) -> a -> c
Run Code Online (Sandbox Code Playgroud)

如何在GHCi中看到运算符优先级?那可能吗?

另外,奖金问题,有没有办法通过ghci查看这些前奏函数的来源?

haskell ghci infix-operator

18
推荐指数
1
解决办法
3556
查看次数

使用`assign()`为列表项赋值

一点点背景首先......

我写了一个中缀函数,实质上取代了成语

x[[length(x) +1]] <- y

..或仅仅是x <- append(x, y)为了矢量.

这里是:

`%+=%` <- function(x, y) {
  xcall <- substitute(x)
  xobjname <- setdiff(all.names(xcall), c("[[", "[", ":", "$"))
  # if the object doesn't exist, create it
  if (!exists(xobjname, parent.frame(), mode = "list") &&
      !exists(xobjname, parent.frame(), mode = "numeric") &&
      !exists(xobjname, parent.frame(), mode = "character")) {
    xobj <- subset(y, FALSE)
  } else {
    xobj <- eval(xcall, envir = parent.frame())
  }

  if (is.atomic(xobj)) {
    if (!is.atomic(y)) {
      stop('Cannot append object of mode …
Run Code Online (Sandbox Code Playgroud)

r variable-assignment infix-operator

17
推荐指数
1
解决办法
147
查看次数

我可以在派生的Show中制作haskell GADT数据构造函数中缀吗?

考虑两个data声明:

{-# LANGUAGE GADTs #-}

data X = Int `Y` Int deriving Show

data Z where
        W :: Int -> Int -> Z  deriving Show

main = do
         print (1 `Y` 2)
         print (3 `W` 4)
Run Code Online (Sandbox Code Playgroud)

运行上述程序会产生:

1 `Y` 2
W 3 4
Run Code Online (Sandbox Code Playgroud)

所以派生show知道Y是中缀并相应地打印它.该::语法似乎并没有让infixness.

有没有办法让编译器派生为for Winfix,(除了显式提供show实例Z)?期望的输出是

1 `Y` 2
3 `W` 4
Run Code Online (Sandbox Code Playgroud)

haskell infix-operator gadt deriving

13
推荐指数
1
解决办法
268
查看次数

为什么f <$> g <$> x等价于(f.g)<$> x虽然<$>不是右关联的?

为什么f <$> g <$> x相当于(f . g) <$> x虽然<$>不是正确联想的?

(这种等价在普通的流行习语中是有效的$,但目前$是正确联想的!)

<*>具有相同的关联性和优先级<$>,但行为不同!

例:

Prelude Control.Applicative> (show . show) <$> Just 3
Just "\"3\""
Prelude Control.Applicative> show <$> show <$> Just 3
Just "\"3\""
Prelude Control.Applicative> pure show <*> pure show <*> Just 3

<interactive>:12:6:
    Couldn't match type `[Char]' with `a0 -> b0'
    Expected type: (a1 -> String) -> a0 -> b0
      Actual type: (a1 -> String) …
Run Code Online (Sandbox Code Playgroud)

syntax haskell infix-notation infix-operator applicative

12
推荐指数
1
解决办法
317
查看次数

定义在公式中使用的中缀运算符

我正在尝试创建解决方案的更简约版本,这需要在表单中指定公式的RHS d1 + d1:d2.

鉴于*在公式的上下文是一个精辟的替身充分互动(即d1 * d2给出了d1 + d2 + d1:d2),我的方法是尝试和定义代替负责人,说%+:%使用中缀方法,我已经习惯于在其他应用中,一拉:

"%+:%" <- function(d1,d2) d1 + d2 + d1:d2
Run Code Online (Sandbox Code Playgroud)

然而,这可以预见失败,因为我没有注意评估; 让我们举一个例子来说明我的进展:

set.seed(1029)
v1 <- runif(1000)
v2 <- runif(1000)
y <- .8*(v1 < .3) + .2 * (v2 > .25 & v2 < .8) - 
  .4 * (v2 > .8) + .1 * (v1 > .3 & v2 > .8)
Run Code Online (Sandbox Code Playgroud)

通过这个例子,希望很清楚为什么简单地写出这两个术语可能是不可取的:

y ~ cut(v2, breaks = c(0, .25, …
Run Code Online (Sandbox Code Playgroud)

r formula infix-operator

12
推荐指数
1
解决办法
229
查看次数

是否可以定义中缀函数?

是否可以在CoffeeScript(或纯JavaScript)中定义自己的中缀函数/运算符?我想打电话

a foo b
Run Code Online (Sandbox Code Playgroud)

要么

a `foo` b
Run Code Online (Sandbox Code Playgroud)

代替

a.foo b
Run Code Online (Sandbox Code Playgroud)

或者,当foo是全局函数时,

foo a, b
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

javascript functional-programming infix-operator coffeescript

11
推荐指数
2
解决办法
4442
查看次数

如何给lambda中的运算符添加空间?

例如,这不是类型检查

\cons nil -> 5 `cons` 3 `cons` nil
Run Code Online (Sandbox Code Playgroud)

这也不是

\(#) -> 5 # 3 # nil
Run Code Online (Sandbox Code Playgroud)

虽然这两者都有

\cons nil -> 5 `cons` nil
\(#) nil -> 5 # nil
Run Code Online (Sandbox Code Playgroud)

有没有办法在lambdas中为运算符分配infixites.我试过了

infixr 5 #
foo = \(#) nil -> 5 # 3 # nil
Run Code Online (Sandbox Code Playgroud)

这给出了没有定义#和的错误

foo = \(infixr 5 #) nil -> 5 # 3 # nil
Run Code Online (Sandbox Code Playgroud)

这只是一个语法错误.

我能做什么?

syntax lambda haskell infix-notation infix-operator

11
推荐指数
1
解决办法
250
查看次数

如何使用**作为使用@infix func**()的指数?

我想用来**重载指数函数.如果我使用类似"^"的东西**,我会工作,但python的做法是,我想用Swift.有办法吗?

错误:没有匹配运算符声明的运算符实现

@infix func ** (num: Double, power: Double) -> Double{
    return pow(num, power)
}

println(8.0**3.0) // Does not work
Run Code Online (Sandbox Code Playgroud)

operators infix-operator swift

10
推荐指数
1
解决办法
5359
查看次数

类似方法语法中的 Raku 中缀运算符

在 Raku 中,中运算符可以像函数一样使用,例如:

1 + 2 ;           # 3
infix:<+>(1, 2) ; # 3
[+] 1, 2 ;        # 3
Run Code Online (Sandbox Code Playgroud)

前缀运算符可以与类似方法的语法(methodop)一起使用:

-1 ;             # -1
1.:<-> ;         # -1
Run Code Online (Sandbox Code Playgroud)

因此,(相当学术的)问题是,中运算符是否也可以以类似方法的方式使用,例如1.:<+>(2)(这是错误的)?

咖喱

(1 + *)(2) ;     # 3
Run Code Online (Sandbox Code Playgroud)

……那是函数(某种)定义和调用,而不是方法调用,也不是类似方法的语法。

自定义方法

my method plus(Int $b --> Int){
  return self + $b;
}

1.&plus(2) ;     # 3
Run Code Online (Sandbox Code Playgroud)

……但+不能使用名称,这也不是没有附加函数定义的直接操作符用法。

methods infix-operator raku

10
推荐指数
1
解决办法
151
查看次数

中缀运算符上的Scala匹配分解

我试图理解ListScala 中s 的实现.特别是我试图了解如何使用中缀运算符编写匹配表达式,例如:

a match {
  case Nil => "An empty list"
  case x :: Nil => "A list without a tail"
  case x :: xs => "A list with a tail"
}
Run Code Online (Sandbox Code Playgroud)

如何允许匹配表达式x :: xs而不是List(x, xs)

scala list match infix-operator

9
推荐指数
2
解决办法
2858
查看次数