php 中作为参数的过程
Procedures as Arguments in php
我正在学习sicp 1.3(Formulating Abstractions with Higher-Order Procedures)。方案代码可以计算从a到b的整数的立方和。
(define (sum term a next b)
(if (> a b)
0
(+ (term a)
(sum term (next a) next b))))
(define (inc n) (+ n 1))
(define (cube x) (* x x x))
(define (sum-cubes a b)
(sum cube a inc b))
我想通过 php 完成,这是代码。
function sum($term,$a,$next,$b){
if ($a>$b){
return 0;
}else{
return $term($a) + sum($term,$next($a),$next,$b);
}
}
function inc($n){
return $n + 1;
}
function cube($x){
return $x*$x*$x;
}
function sum_cubes($a,$b){
return sum(cube,$a,inc,$b); // line 15
}
有效,但我收到了
PHP Notice: Use of undefined constant cube - assumed 'cube' in Command line code on line 15
PHP Notice: Use of undefined constant inc - assumed 'inc' in Command line code on line 15
.
可以吗,有什么更好的实现方法吗?
据我所见,return 语句调用了 cube 和 inc 函数,但它们需要输入参数。如果你不在这里打电话给他们(我认为是这种情况),那么你应该传递前锋,但在他们的名字前面加一个 $。
编辑:请记住,这需要 PHP 5.3.0 或更高版本。有关详细信息,请参阅 manual。
我解决了,只是用引号将函数名括起来。
function sum_cubes($a,$b){
return sum('cube',$a,'inc',$b);
}
您的实施有点不完整。
'cube'($x)
是有效的 PHP,但并不是真正调用 PHP 中的函数的好方法。 (这也真的很可怕,它甚至有效。)
通过使用call_user_func, you can successfully apply any callable
function sum($term, $a, $next, $b) {
if ($a > $b)
return 0;
else
return call_user_func($term, $a)
+ sum($term, call_user_func($next, $a), $b);
}
我正在学习sicp 1.3(Formulating Abstractions with Higher-Order Procedures)。方案代码可以计算从a到b的整数的立方和。
(define (sum term a next b)
(if (> a b)
0
(+ (term a)
(sum term (next a) next b))))
(define (inc n) (+ n 1))
(define (cube x) (* x x x))
(define (sum-cubes a b)
(sum cube a inc b))
我想通过 php 完成,这是代码。
function sum($term,$a,$next,$b){
if ($a>$b){
return 0;
}else{
return $term($a) + sum($term,$next($a),$next,$b);
}
}
function inc($n){
return $n + 1;
}
function cube($x){
return $x*$x*$x;
}
function sum_cubes($a,$b){
return sum(cube,$a,inc,$b); // line 15
}
有效,但我收到了
PHP Notice: Use of undefined constant cube - assumed 'cube' in Command line code on line 15
PHP Notice: Use of undefined constant inc - assumed 'inc' in Command line code on line 15
.
可以吗,有什么更好的实现方法吗?
据我所见,return 语句调用了 cube 和 inc 函数,但它们需要输入参数。如果你不在这里打电话给他们(我认为是这种情况),那么你应该传递前锋,但在他们的名字前面加一个 $。
编辑:请记住,这需要 PHP 5.3.0 或更高版本。有关详细信息,请参阅 manual。
我解决了,只是用引号将函数名括起来。
function sum_cubes($a,$b){
return sum('cube',$a,'inc',$b);
}
您的实施有点不完整。
'cube'($x)
是有效的 PHP,但并不是真正调用 PHP 中的函数的好方法。 (这也真的很可怕,它甚至有效。)
通过使用call_user_func, you can successfully apply any callable
function sum($term, $a, $next, $b) {
if ($a > $b)
return 0;
else
return call_user_func($term, $a)
+ sum($term, call_user_func($next, $a), $b);
}