我可以在GHCi中看到中缀运算符的类型:t如下:
>:t (.)
(.) :: (b -> c) -> (a -> b) -> a -> c
Run Code Online (Sandbox Code Playgroud)
如何在GHCi中看到运算符优先级?那可能吗?
另外,奖金问题,有没有办法通过ghci查看这些前奏函数的来源?
一点点背景首先......
我写了一个中缀函数,实质上取代了成语
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) 考虑两个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 W
infix,(除了显式提供show
实例Z
)?期望的输出是
1 `Y` 2
3 `W` 4
Run Code Online (Sandbox Code Playgroud) 为什么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) 我正在尝试创建此解决方案的更简约版本,这需要在表单中指定公式的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) 是否可以在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
例如,这不是类型检查
\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)
这只是一个语法错误.
我能做什么?
我想用来**
重载指数函数.如果我使用类似"^"的东西**
,我会工作,但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) 在 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)
……但+
不能使用名称,这也不是没有附加函数定义的直接操作符用法。
我试图理解List
Scala 中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)
?
infix-operator ×10
haskell ×4
r ×2
syntax ×2
applicative ×1
coffeescript ×1
deriving ×1
formula ×1
gadt ×1
ghci ×1
javascript ×1
lambda ×1
list ×1
match ×1
methods ×1
operators ×1
raku ×1
scala ×1
swift ×1