コード例 #1
0
ファイル: trees.php プロジェクト: 4johndoe/hexlet
function treeMap($list, $func, $acc)
{
    $iter = function ($list, $acc) use(&$iter, $func) {
        if ($list === null) {
            return $acc;
        }
        $element = car($list);
        if (isPair($element)) {
            $newAcc = treeMap($element, $func, $acc);
        } else {
            $newAcc = $func($element, $acc);
        }
        return $iter(cdr($list), $newAcc);
    };
    return $iter($list, $acc);
}
コード例 #2
0
ファイル: LispTest.php プロジェクト: mudge/php-microkanren
 public function testNilIsNotAPair()
 {
     $list = nil();
     $this->assertFalse(isPair($list));
 }
コード例 #3
0
ファイル: Lisp.php プロジェクト: mudge/php-microkanren
/**
 * Returns the first element of a list for whose car a procedure returns true
 * or false if no match is found.
 *
 * @param callable $proc  a function that takes one argument and returns a
 *                        boolean
 * @param Cons     $alist an association list of key-value pairs
 */
function assp($proc, $alist)
{
    if (isPair($alist)) {
        $car = car($alist);
        try {
            $x = car($car);
        } catch (\InvalidArgumentException $e) {
            throw new \InvalidArgumentException("improperly formed alist {$alist}");
        }
        if ($proc($x)) {
            return $car;
        } else {
            return assp($proc, cdr($alist));
        }
    } else {
        return false;
    }
}
コード例 #4
0
ファイル: Core.php プロジェクト: mudge/php-microkanren
function walkStar($v, $s)
{
    $v = walk($v, $s);
    if (isVariable($v)) {
        return $v;
    } elseif (isPair($v)) {
        return cons(walkStar(car($v), $s), walkStar(cdr($v), $s));
    } else {
        return $v;
    }
}