Haskell语言学习笔记(2)

comments(注释)

  • 单行注释用 --
    x = 5 -- The variable x is 5.
  • 多行注释用 {- ... -}
    x = {- Do this just because you can. -} 5

variables(变量)

  • 变量的值一旦绑定就不再发生变化。
  • 变量中存放的与其说是值,不如说是表达式。(惰性求值)

逻辑运算

 equal tonot equal toandornottruefalse
Haskell==/=&&||notTrueFalse
C/C++==!=&&||!truefalse

guards & where

-- ax2 + bx + c = 0 求解的个数
numOfSolutions a b c
    | disc > 0  = 2
    | disc == 0 = 1
    | otherwise = 0
        where
        disc = b^2 - 4*a*c

type signature(类型签名)

HaskellC++
xor :: Bool -> Bool -> Bool
xor p q = (p || q) && not (p && q)
bool xor(bool p, bool q)
{
    return (p || q) && !(p && q);
}

Maybe类型

Maybe类型是一种参数化的可空类型,在语言中用来表示可有可无这种概念(也就是0个或1个)。

HaskellC++C#Java8
Maybeboost::optional<T>Nullable<T>Optional<T>

Maybe类型,主要有以下几种应用:

  • 作为数据的类型,表示该数据可有可无,在数据为空时可起到其他语言中空指针(或空引用)的作用。
  • 作为函数的参数类型,表示该参数可有可无,起到可选参数的作用。
  • 作为函数的返回值类型,表示返回值可有可无,可以避免在没有合适的返回值时返回特殊值(比如 -1 )或者报运行时错误。

Either类型

Either 类型与 Maybe 类型一样也可以表示一种可能失败的计算。但与 Maybe 类型有所不同的是,Either类型可以在失败时保存失败信息。

list(列表)

  • 列表为大小可变,成员类型相同的数据结构,使用中括号。
  • 在Haskell语言中字符串被看做字符的列表。
  • (:)运算符连接成员与列表,(++)运算符拼接两个列表。

tuple(元组)

  • 元组为大小固定且有序的数据结构,使用小括号。成员类型无须相同,成员的类型和顺序决定元组的类型。
  • 元组本身没有名字,成员也没有名字。
  • 不存在只有一个成员的元组。没有任何成员的元组记作()。

type variable(类型变量)

HaskellC++
fst :: (a, b) -> atemplate<typename A, typename B>
A fst(const pair<A, B>&);

if-then-else & pattern matching

-- if-then-else
mySignum x =
    if x < 0 then -1
    else if x > 0 then 1
    else 0
-- patten matching
mySignum2 x
    | x < 0 = -1
    | x > 0 = 1
    | otherwise = 0

typeclass(类型类)

-- 加号这个函数带两个a类型的参数,返回一个a类型的值。其中a类型属于Num类型类。
(+) :: (Num a) => a -> a -> a

let ... in

-- ax2 + bx + c = 0 求解
roots a b c =
    let sdisc = sqrt (b*b - 4*a*c)
        twice_a = 2*a
    in  ((-b + sdisc) / twice_a,
         (-b - sdisc) / twice_a)

dot dot notation(点点记法)

[1..10]          [1,2,3,4,5,6,7,8,9,10]
[2,4..10]        [2,4,6,8,10]
[5,4..1]         [5,4,3,2,1]
[1,3..10]        [1,3,5,7,9]
[1..]            [1,2,3,4,...]
['a'..'z']       "abcdefghijklmnopqrstuvwxyz"

case ... of

// 分段函数
f 0 = 18
f 1 = 15
f 2 = 12
f x = 12 - x
// case of
f x = case x of
    0 -> 18
    1 -> 15
    2 -> 12
    _ -> 12 - x

{} 和 ;

bar = let a = 1
          b = 2
          c = 3
      in a + b + c

foo = let { a = 1;  b = 2;
        c = 3 }
      in a + b + c

module 导入导出

module SimpleJSON(JValue(..), getString) where

module ExportEverything where

module ExportNothing () where

module PrettyJSON(renderJValue) where
import Numeric (showHex)
import SimpleJSON (JValue(..))
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值