我倒是觉得程序员分这样2类

2014-01-21 09:11:27 +08:00
 kurtis
Type I.
proc1();
proc2();

Type II.
proc1(proc2);
4875 次点击
所在节点    程序员
27 条回复
mikawudi
2014-01-22 02:18:29 +08:00
Func<Func<int, int>, int, Func<int, int>, int, int> sum = (term, a, next, b) =>
{
Func<int, int, int> iter = null;
iter = (a1, result) =>
{
if (a1 > b)
return result;
else
return iter(next(a1), term(a1) + result);
};
return iter(a, 0);
};
int ss = sum((x) => { return x; }, 1, (i) => { return i + 1; }, 10);
C#版本.....简单来说是做累加,不过写的更泛用了....步长和每一次对累加值可以进行自定义....差不多这个意思?....写完才发现lambda表达式貌似不能递归自己....还要显示声明下再用引用来递归...好难受
mikawudi
2014-01-22 02:20:15 +08:00
@dorentus CPS变换了...其实做的是一回事
wity_lv
2014-01-22 09:59:39 +08:00
@loading
@housne
@yuankui
@mikawudi
给一个javascript版本, 用高阶函数做抽象.
function sum (term, a, next, b) {
function iter (a, result) {
if (a > b) {
return result;
}

var ret = term(a) + result;
return iter(next(a), ret);
}

return iter(a, 0);
}

var all = sum(function(x) {
return x;
}, 1,
function(x) {
return x + 1;
}, 100);

console.log(all);
wity_lv
2014-01-22 10:01:34 +08:00
mikawudi
2014-01-22 13:08:42 +08:00
@wity_lv 看了下哥们的帖子。。。。果然看到了sicp
nybux
2014-01-22 13:51:21 +08:00
#include <iostream>
#include <functional>
template<typename F1, typename F2, typename T>
int sum(F1 term, T a, F2 next, T b) {
std::function<int(T,T)> iter = [&](T a, T result){
return (a > b) ? result : iter(next(a), term(a) + result);
};
return iter(a, 0);
}
int main() {
int all = sum([](int x) { return x; }, 1, [](int x) { return x + 1;}, 100);
std::cout << all << std::endl;
}
halfblood
2014-01-23 12:50:16 +08:00
过程式和函数式而已!
整天讨论这些有毛用啊……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/97792

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX