phpfn/curry

函数柯里化和偏应用的便捷实现

2.0.1 2020-08-09 03:10 UTC

This package is auto-updated.

Last update: 2024-09-06 05:34:58 UTC


README

函数柯里化和偏应用的便捷实现。

安装

库可以被安装到任何PHP应用程序中

$ composer require phpfn/curry

为了访问库,请确保将 vendor/autoload.php 包含在您的文件中。

<?php

require __DIR__ . '/vendor/autoload.php';

用法

左柯里化

左柯里化可以理解为向数组中添加参数。然后将这个参数数组应用到函数上。

左柯里化从第一个参数返回部分应用函数。

$fn = \curry(function($a, $b) { return $a + $b; });

$fn(3);      // ($a = 3) + ($b = ?)
$fn(3)(4);   // ($a = 3) + ($b = 4)

右柯里化

同时,右柯里化可以理解为向右侧添加参数。

$fn = \rcurry(function($a, $b) { return $a + $b; });

$fn(3);      // ($a = ?) + ($b = 3)
$fn(3)(4);   // ($a = 4) + ($b = 3)

偏应用

偏应用是指可以指定完全随机的参数,跳过不必要的使用占位符 _

$fn = \curry(function($a, $b, $c) { return $a + $b * $c; });

$fn = $fn(_, 3, 4); // ($a = ?)  + ($b = 3) * ($c = 4)
echo  $fn(42);      // ($a = 42) + ($b = 3) * ($c = 4)
$fn = \curry(function($a, $b, $c) { return $a + $b * $c; });

$fn = $fn(_, 3, _); // ($a = ?)  + ($b = 3) * ($c = ?)
$fn->lcurry(42);    // ($a = 42) + ($b = 3) * ($c = ?)
$fn->rcurry(23);    // ($a = ?)  + ($b = 3) * ($c = 23)
$fn = \curry(function($a, $b, $c) { return $a + $b * $c; });

$sum  = $fn(7, 9);    // 7 + 9 * ?
$sum(6);              // 7 + 9 * 6 

$mul  = $fn(_, 7, 9); // ? + 7 * 9
$mul(6);              // 6 + 7 * 9

$test = $fn(_, 7, _); // ? + 7 * ?
$test(6);             // 6 + 7 * ? 

$test = $fn(_, 7);    // ? + 7 * ?
$test->rcurry(6);     // ? + 7 * 6 

API

函数

  • lcurry(callable $fn, ...$args): Curriedcurry

左柯里化(类似于数组推送参数)

  • rcurry(callable $fn, ...$args): Curried

右柯里化

  • uncurry(callable $fn): mixed

返回结果或部分应用函数

Curried

  • $fn->__invoke(...$args)$fn(...$args)

允许对象转换为可调用类型的魔术方法

  • $fn->lcurry(...$args)

返回一个新的具有左柯里化的函数的方法

  • $fn->rcurry(...$args)

返回一个新的具有右柯里化的函数的方法

  • $fn->reduce()

函数组合的归约。也就是说,将函数归约到单个值——该函数的结果。

  • $fn->uncurry()

尝试进行归约,或将函数归约到另一个,这将返回结果

  • $fn->__toString()

只是一个函数转储