zoukankan      html  css  js  c++  java
  • scheme lambda表达式 形参

     lambda表达式 
    (Lambda (arg1 …) exp1 exp2)
    从演算来看,(let ((var value) …) exp1 exp2…) == ((lambda (var …) exp1 exp2 …) value … )
    对于Lambda函数的参数
    如果形参只有一个,则可以有任意数量的实参,所有实参被格式化为一个list传给函数。
    如果形参list是不正常的list的形式,则形参对应的实参被一一映射,而后的实参被格式化成一个list传给.后的形参,这也意味着,实参个数必须保证形参个数。如果形参是一个正常的list,则实参必须被一一映射
    因此((lambda (x) x) ‘a) = a 而((lambda x  x) ‘a) = (a)

    一次接触Scheme的时候就是先学习的lambda演算,lambda本身就是一个匿名函数,而且 Scheme里面支持匿名函数,可以回顾下当时我的列子,如下: 
    (define foo (lambda (x) 
    (* x x))) 
    Scheme中lambda表达式的形参表有3种接收参数的方式: 
    1,定长,这种是最常见的,eg: 
    (define square (lambda (n) (* n n))) 
    (square 5)=>25 

    2,全定长,目前还没想通用处在哪里eg: 
    (define foo (lambda x x)) 
    (foo 1 2 3)=>(1 2 3) 

    3,半定长,这种在很多语言中都有用到,比如C的printf函数eg: 
    (define f (lambda (x . y) (* x x))) 
    (f 10 20 30)=>100 

    通常函数由以下4个部分组成: 
    1,前继,n!(fac) 
    2,后续,(n-1)!(fac (- n 1)) 
    3,测零,(= n 0) 
    4,不动点算子,1 
    参考:http://www.douban.com/group/topic/7234599/

  • 相关阅读:
    常用颜色
    在VS2010中打开VS2012的项目
    vs2012 断点不能调试
    Setup Factory 打包.netframework 2.0
    Access 中数据库操作时提示from子句语法错误
    vs2012 .netFramwork2.0发布到xp
    c# access插入null值
    Visual Studio安装卸载模板
    Codeforces 455D
    ACdream 1157 (cdq分治)
  • 原文地址:https://www.cnblogs.com/youxin/p/3593630.html
Copyright © 2011-2022 走看看