代码之家  ›  专栏  ›  技术社区  ›  moo

infix操作符在haskell中做什么?

  •  44
  • moo  · 技术社区  · 16 年前

    我在读书 A Gentle Introduction to Haskell (不是很温和)它反复使用 : 没有直接解释它做什么的操作员。

    那么,它到底是做什么的呢?

    4 回复  |  直到 16 年前
        1
  •  70
  •   Community Mohan Dere    10 年前

    : 是__prepend_运算符:

    x : xs
    

    返回具有 x 作为第一个元素,后跟中的所有元素 xs .在其他功能语言中,这通常被称为 cons ,因为它通过从空列表中重复应用程序递归构造列表:

    1 : 2 : 3 : 4 : []
    

    是名单 [1, 2, 3, 4] .

        2
  •  21
  •   codebliss    16 年前

    可以随时查看ghci/hugs中的类型,因为本教程的第一步鼓励您下载ghc/hugs。

    Prelude> :t (:)
    (:) :: a -> [a] -> [a]
    Prelude> :t (++)
    (++) :: [a] -> [a] -> [a]
    

    从它们各自的类型中,很容易推断出它们的用法。

    PS: http://haskell.org/hoogle/ 真是棒极了。

        3
  •  14
  •   Milosz SilentGhost    11 年前

    haskell中的:运算符是列表的构造函数。它将冒号前面的内容“cons”到冒号后面指定的列表中。

    例如,通过将每个数字“组合”到空列表中来创建整数列表,例如;

    名单 [1,2,3,4] 其构造如下:

    • 4 : [] (将4考虑到空列表中)
    • 3 : [4] (将3考虑到包含4个的列表中)
    • 2 : [3,4] (将2考虑到包含3、4的列表中)
    • 1 : [2,3,4] (将1考虑到包含2、3、4的列表中)

    给你;

    [1,2,3,4]
    

    写得很清楚;

    1 : 2 : 3 : 4 : []
    
        4
  •  10
  •   jberryman    16 年前

    它是列表的类型构造函数。它与其他类型的构造函数没有区别,比如 Just Left ,但它是中缀。有效的类型构造函数可以是以大写字母开头的单词,也可以是以冒号开头的符号。

    因此,您可以为自己的数据类型定义中缀构造函数。例如:

    data MyList a = a :> MyList a
                  | Empty
    

    在上面的代码中,我们定义了一个名为 MyList 有两个构造器:第一个是一个外观怪异的构造器 :> 它需要一个元素和另一个元素 MyList a ;第二个是空构造函数 Empty 相当于 [] 在Haskell的本地列表中。

    上述等同于:

    data MyList a = Cons a  (MyList a)
                  | Empty
    
    推荐文章