【问题标题】:How to specify implicit arguments for infix operators?如何为中缀运算符指定隐式参数?
【发布时间】:2021-06-18 10:31:36
【问题描述】:

假设我有一个操作员

infixl 9 @@

(@@) : Tensor [S n] t -> Tensor (S n :: tail) t -> Tensor tail t

(其中Tensor 采用Vect 和一个类型,但这在这里并不重要)。如果我想指定tail,我知道我可以通过将@@ 变成函数(@@) 来添加到a @@ b 之类

(@@) {tail=[]} a b

但这在某种程度上违背了它被中缀的意义。什么是惯用语?

【问题讨论】:

    标签: implicit idris infix-operator


    【解决方案1】:

    你可以使用

    let (@@) = (@@) {tail=[]} in a @@ b
    

    有点长,但保留了语法

    【讨论】:

      【解决方案2】:

      您可以尝试使用后缀投影运算符:

      (.f) : Tensor [S n] t -> Tensor (S n :: tail) t -> Tensor tail t
      
      a.f {tail=[]} b
      

      【讨论】:

      • 如果我这样做,我会得到解析错误。我正在使用 Idris2 顺便说一句。我也有不止一个隐含的论点
      • if you're sure ...(这是原版)
      • 基于该代码,第 30 行,(kernel x x_train) @@ {leading=[]} {head=[samples]} inv @@ {leading=[]} {head=[samples]} y_train ... 添加括号并不能解决问题
      • @joel 我的意思是你尝试使用的代码.f
      • @joel @@ 是一个中缀运算符。 .f 是后缀投影运算符。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      • 2010-10-24
      • 1970-01-01
      相关资源
      最近更新 更多