作者xcycl (XOO)
看板Programming
标题Re: [问题] 增加自变量
时间Fri Jul 10 01:43:47 2009
※ 引述《skgic (Ru|Ki)》之铭言:
: ANSI-LISP书中提到一个c做不到例子:
: "写一个函数接受数n, 返回一个函数: 它把n增加到它的自变量上去 "
: *******程式码*******
: (defun addn (n)
: #'(lambda (x)
: (+ x n)))
: ********************
: C作不到的原因是没办法把funtion当作参数传递 应该没理解错吧?
: 但还是看不懂n加到自变量上面的意思是指什麽
: 请问有没有比较简单的说明这个题目
: 谢谢<(_ _)>
在 C++ 可以用 std::functional 来作这些 trick,不过很绑手绑脚,
不像 functional programming 那样直接。大概像是这样:
struct addn : public binary_function<int,int,int> {
int operator() (int a, int b) {return (a + b);}
};
// addn(x, y) = x + y
bind1st(add_to() ,10) // 大概像是这样,很久没用了 ...
// f(y) = 10 + y
上面那个函数用 Haskell 这类的语言写起来,会是
addn :: Int -> Int -> Int
addn x n = x + n
上面这个 Int -> Int -> Int 其实是 Int -> (Int -> Int) 的省略写法,意思是
传进一个型别 Int 的元素,会得到一个整数到整数的函数,所以再 apply 一个
就会得到 Int。但是在 C 的话,对应的型别应该是
addn :: (Int x Int) -> Int
必须传进两个 Int 才可以。虽然可以用 function pointer 传函数,但是
要作这些运算的时候就显得很罗唆
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.193.218.153
※ 编辑: xcycl 来自: 123.193.218.153 (07/10 01:52)