zoukankan      html  css  js  c++  java
  • haskell学习笔记_函数

         一开始学习函数式编程语言就被告知函数式编程语言是一种“定义式”的语言,而不是一种命令式的语言,在学习haskell的函数语法时,此感觉更加强烈,haskell的函数定义倾向于一种类似C++里面的switch /case 的语义,将函数所处理的事情分类,然后定义好每个分类该如何返回。所以我的函数笔记主要就haskell函数里的几种分类情况进行讨论:

    1. condition expression

    语法类似于if then else ;允许嵌套,但是每个if  必须对应一个else 否则语法报错。示例如下:

    --单一示例: abs 函数
    
    abs :: Int -> Int abs x = if x>= 0 then x else -x
    

      

    --嵌套示例
    
    signum :: Int -> Int 
    signum x =  if x > 0  then 1 else
                            if x == 0 then 0 else -1

       2.   Guarded equations

            由一组成为guards的逻辑表达式组成,从上往下去try 每一个expression ,true则执行后面的语句(后面的语句不再执行),否则往下去try.Special case :otherwise 匹配所有的情况。如果没有匹配项,程序会报错(函数所有的分类语法都一样,如果没有匹配则会报错)。分类符号:“|” 读作 “such as”. 示例如下:

    -- abs 
    abs :: Int -> Int
    abs x |  x >= 0   x
              otherwise  -x

      3. Pattern matching

    pattern matching 的定义不是很清晰。不过我自己所理解的pattern matching 函数类型是:(function  name + Syntactic expression  + return result )^  .Syntactic expression 支持 Tuple patterns 、List patterns  Integer patterns 等等。

    Integer patterns 支持一种 n+k的形式,n为Int variable , k 为 Int constant .示例如下:

    pre : Int -> Int
    pre 0  =  0
    pre n+ 1  =  n

    4 . Lambda expressions

    匿名函数。示例如下:

    add = λx -> (λy - >  x + y)

    5 .Sections

    In general,if ⊕ is an operator,then expressions of the form( ⊕ ),(x ⊕ ),and ( ⊕ y) for arguments x and y are called sections, whose meaning as functions can be formalised using lambda expressions as follows :

    (⊕)   = λx → (λy → x ⊕ y)
    (x ⊕) = λy → x ⊕ y
    (⊕ y) = λx → x ⊕ y
    还有一些别的在函数中使用的比如 where 语句用于定义函数中使用的一些变量、let it  be  语句、case 语句等。
  • 相关阅读:
    Android:ScaleType与Matrix相关
    Android:不同drawable文件夹的区别
    Android关于inflate的root参数
    Android:手把手教你打造可缩放移动的ImageView(下)
    Android:手把手教你打造可缩放移动的ImageView(上)
    在android studio中集成javah, ndk-build进行JNI开发
    彻底理解Toast原理和解决小米MIUI系统上没法弹Toast的问题
    Java基础知识
    从.NET的宠物商店到Android MVC MVP
    从零开始搭建架构实施Android项目
  • 原文地址:https://www.cnblogs.com/graph/p/3261669.html
Copyright © 2011-2022 走看看