由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - [求教,R, currying]函数编程20行代码,如何debug?
相关主题
如果给随即函数rand[1,5] 如何产生rand[1,7] (转载)how to proof (转载)
static如何作为函数?如果python command line positional arguments 里有些是运算,那这种argument 该怎么处理?
请教VC2003 debug问题how to debug mpi?
面试题:debug: 函数return to a wrong place能否给些讲debug经验的文章和书籍 (转载)
Edit & Continue不work,怎么办?一个debug的问题
编程的宗派不同compiler速度可以差很远吗?
王垠: 编程的宗派After build,how to run the program on visual C# 2008
大过节的,不要吵啦,推荐本函数编程的入门书吧?问个超简单的C问题
相关话题的讨论汇总
话题: 函数话题: function话题: arguments话题: 代码
进入Programming版参与讨论
1 (共1页)
m******r
发帖数: 1033
1
其实没有bug, 都能正确执行,但我无法理解下面20多行R代码是怎么跑的,想把里面的
函数打印出来,也打不出来。 以前学C的时候,都有一个watch window, 每跑一步,看
看里面变量如何变化,就逐渐理解程序在干什么。R里面是函数套函数, 我以前都是用
pryr:unenclose 来看看函数里面是什么。 可用在以下的代码,就不灵了。不知道为什
么。
以下代码是来自于Functional Programming in R: Advanced Statistical
Programming for Data Science, Analysis and Finance by Thomas Mailund
我瞎猜可能是这样
第一步:1 +2y +3z
第二步:1 +2*2 +3z
第三部:1 +2*2 +3*3
也有可能是反过来的
第一步x + 2*y +3*3
第二步x + 2*2 +3*3
第三部1+ 2*2 +3*3
curry <- function(f) {
n <- length(formals(f))
cat('how_many_parameters ', n);
if (n == 1) return(f) # no currying needed
arguments <- vector("list", length = n)
last <- function(x) {
arguments[n] <<- x
do.call(f, arguments)
cat('sucess_do_call')
}

cat('out_of_do_call')

make_i <- function(i, continuation) {
force(i) ; force(continuation);
function(x) {
arguments[i] <<- x
continuation
}
}
continuation <- last
for (i in seq(n-1, 1)) {
continuation <- make_i(i, continuation)
cat('this_is_in_for_loop', i)
#unenclose(continuation)
}
continuation
}
f <- function( x , y, z) x + 2*y +3 *z
curry(f)(1)(2)(3);
n*****3
发帖数: 1584
2
The best way to get a intro functional programming book/blog. R is not the
best language to start to learn these idea.
curry/partial .. use a lot of idea like "function as parameter.." ,
you can see/print what this point it, but you can NOT see the value before
it is evaluated.

【在 m******r 的大作中提到】
: 其实没有bug, 都能正确执行,但我无法理解下面20多行R代码是怎么跑的,想把里面的
: 函数打印出来,也打不出来。 以前学C的时候,都有一个watch window, 每跑一步,看
: 看里面变量如何变化,就逐渐理解程序在干什么。R里面是函数套函数, 我以前都是用
: pryr:unenclose 来看看函数里面是什么。 可用在以下的代码,就不灵了。不知道为什
: 么。
: 以下代码是来自于Functional Programming in R: Advanced Statistical
: Programming for Data Science, Analysis and Finance by Thomas Mailund
: 我瞎猜可能是这样
: 第一步:1 +2y +3z
: 第二步:1 +2*2 +3z

m******r
发帖数: 1033
3
谢谢指教。 请问有办法把continuation打出来吗? 比如x +2y +3*3, 这样我知道每一
步loop在做什么。
三民主义, dracobe都来谈谈吧。

【在 n*****3 的大作中提到】
: The best way to get a intro functional programming book/blog. R is not the
: best language to start to learn these idea.
: curry/partial .. use a lot of idea like "function as parameter.." ,
: you can see/print what this point it, but you can NOT see the value before
: it is evaluated.

n******7
发帖数: 12463
4
我写R的时候也有这个疑问,如何debug?
我记得Rstudio现在可以设置断点了吧
不过函数套函数的时候要怎么搞呢?
以前R的code一旦写多了,debug就是个噩梦
特别是要跑半个小时来reproduce某个bug。。
d******c
发帖数: 2407
5
加个browser(),那是个交互R shell,然后可以一步一步往前走看发生了什么,还可以
执行任何命令,检查任何内存变量。
另外我几乎没用过currying,觉得这东西在解决一个根本不重要的问题。
这本书是什么,amazon一个review都没有,作者是个搞bioinfo的,对这种还有packet
的书我都敬而远之。不是不尊敬bioinfo,是搞bioinfo的教人编程感觉不太靠谱。就算
作者是CS背景,但在bioinfo领域编程,整个环境就不是个注重代码质量的环境。
我看重函数编程的是它减少全局性,函数行为完全可预测没有外部因素,把函数组合起
来更灵活,函数比类的粒度更小,灵活性表达力更强。
m******r
发帖数: 1033
6
多谢回答。 这个作者写了三本书,都是关于R的, meta programming, OOP, 还有这本
。 欧洲人,写得可以说比较通俗易懂(比较而言),有时还有图形解释,没找到任何
语法,拼写错误,在这类书里面还是少有的。 反正比R文档强。
R这个东西初学者两大难点,1,每个函数有自己的环境,造个函数就造了个环境; 2.
就是把函数当参数传递。 1其实好理解,类似于local/global 变量; 2如果没有工具
看函数里面的东西,光凭脑子想,就太抽象了。 好比中学讲解什么是f(x), 定义就是
一句话,讲解集合是如何映射到另外一个集合的, 没人听得懂,听懂也不会用。 你得
多讲讲 y=3x , 再听不懂, 就得讲3乘2。
R所谓‘美丽’的地方就是很多代码直接书写f,g,h ,有种看数学书的感觉, ‘丑陋’
之处就她不给你看三乘二是如何实现的. 好比美女,不给你看丑陋的地方,总是让人不
过瘾。

packet

【在 d******c 的大作中提到】
: 加个browser(),那是个交互R shell,然后可以一步一步往前走看发生了什么,还可以
: 执行任何命令,检查任何内存变量。
: 另外我几乎没用过currying,觉得这东西在解决一个根本不重要的问题。
: 这本书是什么,amazon一个review都没有,作者是个搞bioinfo的,对这种还有packet
: 的书我都敬而远之。不是不尊敬bioinfo,是搞bioinfo的教人编程感觉不太靠谱。就算
: 作者是CS背景,但在bioinfo领域编程,整个环境就不是个注重代码质量的环境。
: 我看重函数编程的是它减少全局性,函数行为完全可预测没有外部因素,把函数组合起
: 来更灵活,函数比类的粒度更小,灵活性表达力更强。

1 (共1页)
进入Programming版参与讨论
相关主题
问个超简单的C问题Edit & Continue不work,怎么办?
C++现在写起来真舒服啊编程的宗派
SQL debug step into a store procedure from another one (转载)王垠: 编程的宗派
大家不觉得这篇文章很有道理么?未来语言的趋势?大过节的,不要吵啦,推荐本函数编程的入门书吧?
如果给随即函数rand[1,5] 如何产生rand[1,7] (转载)how to proof (转载)
static如何作为函数?如果python command line positional arguments 里有些是运算,那这种argument 该怎么处理?
请教VC2003 debug问题how to debug mpi?
面试题:debug: 函数return to a wrong place能否给些讲debug经验的文章和书籍 (转载)
相关话题的讨论汇总
话题: 函数话题: function话题: arguments话题: 代码