lambda --- 【sjjf】咸蛋村之每周例课


sjjf(190223605) 22:54:12
c.如果M是项,x是变元,那么 λx.M也是项--函数抽象
也就是函数定义。 可以认为函数体是M ,参数是x
sjjf(190223605) 22:54:49
d.仅仅由这些规则归纳定义的符号串也是项
sjjf(190223605) 22:54:57
这是lambda的语法
呆熊(116455762) 22:55:30
浪费了,《什么是数学》那本书不在……
sjjf(190223605) 22:56:02
(MN)与 (m n)没有区别
无锋手里剑(510857) 22:56:11
无聊中
病态的完美主义(29129842) 22:56:16
roger
香瓜(27815917) 22:57:49
呼,觉得不管是什么的语法,都跟这类似咧
无锋手里剑(510857) 22:58:21
 
sjjf(190223605) 22:58:44
2.alpha变换: 入x.M=入y.M[x/y]
香瓜(27815917) 22:58:53
 追刀子
病态的完美主义(29129842) 22:59:11
λy.M[x/y] 是什么意思
风平浪静(316246197) 23:00:51
http://blog.sina.com.cn/s/blog_4aa1dcb9010009uz.html
sjjf(190223605) 23:00:52
这段话的意思是,x在入x.M这个项中是一个约束变量,
用y来代替x这个量后,得到另外一个等价的式子
入y.M[x/y]
香瓜(27815917) 23:02:17
x/y`不是一个表达式吧
sjjf(190223605) 23:02:24
恩,对,就是这个blog
sjjf(190223605) 23:02:30
说的
无锋手里剑(510857) 23:03:49
 完全看不懂
拉拉风车(272884316) 23:03:51
 x/y 这个啥意思?替换?
sjjf(190223605) 23:04:06
意思就是用y来代替x
sjjf(190223605) 23:04:50
alpha变换的意思就是只作简单的符号变换,
用来区分约束变量和自由变量
拉拉风车(272884316) 23:05:08
x.M == M(x)
y.M ==M(y)?
sjjf(190223605) 23:05:27
实际上,如果你足够强悍,能够一样就能看得清楚
各个变量的辖域
sjjf(190223605) 23:05:44
那么可以不用做alpha变换
无锋手里剑(510857) 23:06:59
 
咸蛋菜鸟-C.Y.(56165009) 23:06:59
恩,jj继续。。。
sjjf(190223605) 23:07:20
这是alpha变换,
接着到beta变换了
sjjf(190223605) 23:07:31
哦,不是变换,使规约
sjjf(190223605) 23:07:34
是规约
无锋手里剑(510857) 23:07:59
变形金刚么
病态的完美主义(29129842) 23:08:01
alpha规约?
sjjf(190223605) 23:08:11
alpha变换,beta规约
咸蛋菜鸟-C.Y.(56165009) 23:09:15
好像跟那段js有些接近了
js用的lambda的语法?
sjjf(190223605) 23:09:35
==,一会儿你才能理解 js的closure
sjjf(190223605) 23:09:47
现在还没有到时候
病态的完美主义(29129842) 23:09:54
唯一比我更“聪明”的就是 CY 了  - -b
sjjf(190223605) 23:10:09
如果你提前理解的话,也可以的..
sjjf(190223605) 23:10:43
好,来看看beta规约吧
sjjf(190223605) 23:10:57
你们是选择看blog的,还是我再敲一边呢?
都差不多的
无锋手里剑(510857) 23:11:19

咸蛋菜鸟-C.Y.(56165009) 23:11:20
拒绝看长篇
sjjf(190223605) 23:11:59
beta规约很简单,就是函数调用
病态的完美主义(29129842) 23:12:14
blog 地址给一下吧
sjjf(190223605) 23:12:45
刚才前面有
咸蛋菜鸟-C.Y.(56165009) 23:12:55
http://blog.sina.com.cn/s/blog_4aa1dcb9010009uz.html
病态的完美主义(29129842) 23:12:59
就是刚才的?OK
sjjf(190223605) 23:14:58
λx.M)N 规约为 M[x/N]
sjjf(190223605) 23:15:19
(λx.M)N 规约为 M[x/N]
sjjf(190223605) 23:16:10
意思就是表达 (M N)的意思,
就是将 N替换掉 M的参数,得到的结果

咸蛋菜鸟-C.Y.(56165009) 23:16:29

sjjf(190223605) 23:16:59
规约很简单,但是规约确实最重要的
sjjf(190223605) 23:17:06
规约有好几种策略
sjjf(190223605) 23:17:44
对于一个复杂的表达式,进行规约后才能得到比较简单的
表达式
咸蛋菜鸟-C.Y.(56165009) 23:18:02
规约不过是个 函数的调用?就是可以理解为传入实参到形参的转化?
sjjf(190223605) 23:18:04
第一种规约策略叫做:全beta规约

sjjf(190223605) 23:18:50
可以那么理解,但是现在尽量不要想到编程,你应该想到

f(x)=2*x
当x =3 是,应该可以规约为6
咸蛋菜鸟-C.Y.(56165009) 23:19:27

sjjf(190223605) 23:19:36
回到全beta规约吧,全beta规约的意思是
可以在任意的地方的某个约式进行规约,也就是没有章法了
sjjf(190223605) 23:20:16
第二种策略: 规范顺序规约
最左边,最外边的约式总是第一个规约
咸蛋菜鸟-C.Y.(56165009) 23:20:35
没有章法 
sjjf(190223605) 23:21:25
第三种策略:按名调用策略
不允许在抽象内部规约

咸蛋菜鸟-C.Y.(56165009) 23:23:19
什么叫 抽象内部?
sjjf(190223605) 23:23:20
第四种策略:按值调用规约
只有最外层的约式可以规约,并且只有当该约式的右边已经规约到一个值时才能进行规约
sjjf(190223605) 23:24:18
入x.m
sjjf(190223605) 23:24:26
就叫做函数抽象
咸蛋菜鸟-C.Y.(56165009) 23:24:37
哦哦。。
sjjf(190223605) 23:26:02
c语言貌似是按值调用规约策略
咸蛋菜鸟-C.Y.(56165009) 23:26:28
恩,js呢
sjjf(190223605) 23:26:53
所以c语言实现不了刚才的那种js的closure (这点我没有确定)
咸蛋菜鸟-C.Y.(56165009) 23:27:11
哦,我也不懂  c语言用的什么规约

咸蛋菜鸟-C.Y.(56165009) 23:31:20
jj 现在很迫切想知道 JS用的什么规约
sjjf(190223605) 23:31:28
好了,现在再来看看
  <SCRIPT LANGUAGE="JavaScript">
  <!--
    var aa = function(e){
       return function(p){
           alert(e+"-"+p);
       };
   };
   aa("abc")("ef");
  //-->
  </SCRIPT> 
以及
抽象的形式
入.x 入.y x


sjjf(190223605) 23:32:18
js用的应该是按名调用规约
咸蛋菜鸟-C.Y.(56165009) 23:33:11
不允许在抽象内部规约。
那就是function函数体内部不允许进行规约喽?
病态的完美主义(29129842) 23:33:24
邪恶。。
sjjf(190223605) 23:34:36
入.x 入.y x 的意思是
我们传入第一个参数 “abc”进去后规约得到了一个项 入.y M
再传入 ef 后,项  入.y M 被规约,从而求出 最后的结果

sjjf(190223605) 23:35:52
回头看看lisp社区的定义: closure是一种表示带有自由变量的过程而采用的技术
咸蛋菜鸟-C.Y.(56165009) 23:36:03
靠。。。。。
sjjf(190223605) 23:36:18
你是否明白了这个定义呢?
sjjf(190223605) 23:36:28
通过以上的分析,你是否明白了这个定义呢?
病态的完美主义(29129842) 23:36:58
所以对应于过程化编程的“函数定义”的 lisp defun 就是一个绑定 lambda 表达式到一个名称的过程?
sjjf(190223605) 23:37:14
恩,我不会lisp
病态的完美主义(29129842) 23:37:17
。。
sjjf(190223605) 23:37:39
我只是看到
<http://blog.csdn.net/g9yuayon/archive/2007/04/18/1568980.aspx>
sjjf(190223605) 23:37:56
这篇文章里面提到了,所以我才开始思考的
sjjf(190223605) 23:38:18
找到了最初的closure的来源
sjjf(190223605) 23:38:24
是lisp
病态的完美主义(29129842) 23:38:35
(defun call-make (&optional target)
  (ops))
这个就是一个简单的 lisp 函数定义
病态的完美主义(29129842) 23:39:07
defun 是关键字,call-make 是函数名称,target 是形参,&optional 是对 target 的修饰
最后一个 list (ops) 就是函数体的对应
病态的完美主义(29129842) 23:39:22
看看 jj 能不能对应到你了解的 lambda 概念上
sjjf(190223605) 23:39:43
入.x M

sjjf(190223605) 23:40:09
对了,关于多个参数
sjjf(190223605) 23:40:21
纯lambda是只有一个参数的
咸蛋菜鸟-C.Y.(56165009) 23:40:40
只有一个参数?
sjjf(190223605) 23:40:55
但是,多个参数是可以通过curry变换达到
sjjf(190223605) 23:41:47
比如 入.x 入.y x 完全可以用 表达成 f(x,y)的方式
咸蛋菜鸟-C.Y.(56165009) 23:42:07
这样是一个参数?
病态的完美主义(29129842) 23:43:38
λ.x λ.y x 只有 x 一个自由变量
咸蛋菜鸟-C.Y.(56165009) 23:44:47
对于 入.y x 来说,x是自由变量
sjjf(190223605) 23:45:06
==,我想想
sjjf(190223605) 23:45:30
我看看curry变换,我的笔记上这一块没有写,因为当时觉得太简单了
sjjf(190223605) 23:47:56
狒狒,可以对应的上的
病态的完美主义(29129842) 23:48:07

sjjf(190223605) 23:48:36
那你定一个具体的函数先
病态的完美主义(29129842) 23:48:53
ok
咸蛋菜鸟-C.Y.(56165009) 23:48:58
刚刚不有一个吗
sjjf(190223605) 23:49:07
如果你用的那个模型,我也只能用 入.x M
sjjf(190223605) 23:49:32
我知道狒狒想干吗了
咸蛋菜鸟-C.Y.(56165009) 23:49:33
病态的完美主义(29129842) 23:38:35
(defun call-make (&optional target)
  (ops))
这个就是一个简单的 lisp 函数定义
病态的完美主义(29129842) 23:49:48
(defun build()
  (compile "make -k all tags"))
sjjf(190223605) 23:50:09
病态的完美主义(29129842) 23:38:35
(defun call-make (&optional target)
  (ops))
这个就是一个简单的 lisp 函数定义

sjjf(190223605) 23:49:08
如果你用的那个模型,我也只能用 入.x M
病态的完美主义(29129842) 23:50:16
简单的这个,定义一个无参数的 build 函数,作用是调用 elisp 预定义函数 compile,参数 "make -k all tags"
咸蛋菜鸟-C.Y.(56165009) 23:50:44
没参?
sjjf(190223605) 23:50:48
嗯,我知道你想干吗,现在来开始忽悠关于lambda的进阶知识
咸蛋菜鸟-C.Y.(56165009) 23:50:52
噢噢,看错了
病态的完美主义(29129842) 23:51:22
call-make 相当于 call-make = λ.target (opts) 这样?
sjjf(190223605) 23:51:27
==
病态的完美主义(29129842) 23:52:02
我知道 defun 的作用是把一个 lambda 表达式绑定到一个名字,其中名字是 defun 的第一个参数,之后的应该就是 lambda 表达式了
sjjf(190223605) 23:52:06
入.x M N
N== make -k...
M = compile
病态的完美主义(29129842) 23:52:31
入.x M N
N== make -k...
M = compile

这个是 build() 哈?
咸蛋菜鸟-C.Y.(56165009) 23:52:47
 对啵。。JJ神呀

sjjf(190223605) 23:53:03
是的
sjjf(190223605) 23:53:20
对了,我还漏了一点东西没有忽悠你们
 海浪 (284165841) 23:53:23
 晕呼。。。
病态的完美主义(29129842) 23:53:33
两个约束变量。。
sjjf(190223605) 23:53:40
 
sjjf(190223605) 23:53:47
这是我的总结的规律
sjjf(190223605) 23:53:58
不一定对,反正凑合着用
病态的完美主义(29129842) 23:53:58
你的 λ.x M N 的 x 是啥?
sjjf(190223605) 23:54:10
无参数
sjjf(190223605) 23:54:25
你可以理解 M是不包含x的项
病态的完美主义(29129842) 23:54:31
ft
sjjf(190223605) 23:54:50
在编译器里面 没有参数 可试用void来代替哦
sjjf(190223605) 23:55:17
我知道你想干吗
sjjf(190223605) 23:55:29
开始第二阶段的忽悠
病态的完美主义(29129842) 23:55:38
我应该找本离散数学补一下常识了……
sjjf(190223605) 23:56:15
你们知道操作是函数
咸蛋菜鸟-C.Y.(56165009) 23:56:20
我家有一本,n久前的。。小熊 这个数学才子呢?
sjjf(190223605) 23:56:44
但是如果你们要是知道数也可以用函数来表达的话,会怎么想呢?
病态的完美主义(29129842) 23:56:50
。。。
病态的完美主义(29129842) 23:56:54
一个返回常量的函数
病态的完美主义(29129842) 23:56:59
《对象揭秘》提过
咸蛋菜鸟-C.Y.(56165009) 23:57:03
 
病态的完美主义(29129842) 23:57:03
Effiel 概念之一
sjjf(190223605) 23:57:06
事实上,lambda里面没有常量,没有数这个概念
sjjf(190223605) 23:57:34
所谓数,已经被抽象成为函数了
咸蛋菜鸟-C.Y.(56165009) 23:57:45
全部都是 λ.x M N ?
sjjf(190223605) 23:57:49
是的
呆熊(116455762) 23:57:58
数学不及格,靠!
sjjf(190223605) 23:58:00
比如bool值 

你可能感兴趣的:(function,Blog,Build,lambda,360,lisp)