一段PHP版本的lambda实现
来源:互联网 发布:yyf的淘宝店是哪个 编辑:程序博客网 时间:2024/06/10 14:35
还有些缺陷,但能实现Church的自然数的lambda定义
class lambda{ private $f; private $args; private $count; public function __construct($f, $args = []) { if ($f instanceof lambda) { $this->f = $f->f; $this->count = $f->count; $this->args = array_merge($f->args, $args); } else { $this->f = $f; $this->count = count((new ReflectionFunction($f))->getParameters()); $this->args = $args; } } public function __invoke() { if (count($this->args) + func_num_args() < $this->count) { return new lambda($this, func_get_args()); } else { $args = array_merge($this->args, func_get_args()); $r = call_user_func_array($this->f, array_splice($args, 0, $this->count)); return is_callable($r) ? call_user_func(new lambda($r, $args)) : $r; } }}function lambda($f){ return new lambda($f);}$int1 = lambda(function($f, $x) { return $f($x);});$successor = lambda(function($p, $f, $x) { return $f($p($f, $x));});$add = lambda(function($p, $q, $f, $x) { return $p($f, $q($f, $x));});$mul = lambda(function($p, $q, $x) { return $p($q($x));});$exp = lambda(function($m, $n) { return $n($m);});$int2 = $successor($int1);$int3 = $add($int1, $int2);$int4 = $mul($int2, $int2);$int5 = $add($int2, $int3);$int6 = $mul($int3, $int2);$int7 = $add($int3, $int4);$int8 = $exp($int2, $int3);$int9 = $exp($int3, $int2);function p($num){ echo $num(function ($v){ return $v + 1; }, 0). "\n";}p($int1);p($int2);p($int3);p($int4);p($int5);p($int6);p($int7);p($int8);p($int9);
0 0
- 一段PHP版本的lambda实现
- php实现文件下载的一段代码
- php实现文件下载的一段代码
- php实现一段非常有意思的代码(可扩展)
- lambda的实现
- boost::lambda的实现模拟
- Lift ( lambda 的新实现 )
- Javascript Lambda的简单实现
- lambda表达式的底层实现
- lambda表达式的简单实现
- 一段php加密解密的代码
- 一段php的文件下载函数
- 一段PHP加密与解密的代码
- 一段php加密解密的代码
- 一段简单的php分页代码示例
- 一段简洁的PHP安装文件代码
- PHP 图片防盗链的一段代码
- 截取一段字符串的函数—PHP
- Android 跨应用程序访问窗口知识点总结
- Objective-C的动态特性
- 怎么使float保留精确小数
- spring和hibernate整合、spring和jdbc整合 配置文件
- bridge-nf-call-iptables
- 一段PHP版本的lambda实现
- ArrayList、Iterator的remove方法
- [博弈dp] hdu 4778 Gems Fight!
- Eclipse轻松玩转SmartFramework
- 基于Linux的 线程的简单应用
- 为什么要用非关系型数据库
- disconnected no supported authentication methods available(server sent: publickey,keyboard interae)
- JAVA程序实现 maven本地jar包安装
- 【ZZ】神与学霸的区别