[language] 啊 怎么定义任意个参数的函数啊
tangtong
2008-11-21
谁能解释下,在haskell这个怎么实现啊。突然傻眼了。。
|
|
CloudiDust
2008-11-21
可以把参数收集在一个tuple或者list或者其他数据结构中然后传递,貌似是没有变长参数的。
|
|
tangtong
2008-11-21
但是getArgs可以啊,具体情况就是SICP2.20,这个用function怎么做
|
|
CloudiDust
2008-11-21
getArgs也不是变长参数啊,它本身似乎是没有参数的吧,返回调用时的命令行参数列表……
SICP 2.20 这个应该是将参数全都放到一个列表里去然后在列表上处理(虽然和原来的就有差别了) |
|
CloudiDust
2008-11-21
查了一下资料,Haskell里要实现vararg还是可能的,不过要用到比如函数依赖这样的高级特性……
|
|
tangtong
2008-11-21
可以具体解释一下吗,函数依赖。或者发一下资料?
|
|
CloudiDust
2008-11-22
http://okmij.org/ftp/Haskell/vararg-fn.lhs
这份代码~函数依赖的话,我也并不是很清楚~ |
|
tangtong
2008-11-23
test.lhs:4:2:
Too many parameters for class `BuildList' (Use -XMultiParamTypeClasses to allow multi-parameter classes) In the class declaration for `BuildList' Failed, modules loaded: none. 关键在这里 > {-# OPTIONS -fglasgow-exts #-} 我查了haskell98 的定义 class 的参数只能为a 或者(a1,a2,...) 即是单个元素或者一个tuple 谁解释一下这个OPTION 还有这个资料来源很神奇,有没有更多的分享一下 |
|
CloudiDust
2008-11-24
这个Option打开的是GHC的扩展~有很多……
貌似函数依赖也是GHC的扩展。 那个东东我是Google到的~ |
|
fredchen
2008-12-21
我觉得比较简单的方法还是用list吧,这样好实现也好理解
如果一定要实现不定长参数,可以参考Text.Printf.printf的实现,原理可能跟上面说的BuildList有些类似,但好像没有要求启用扩展,具体还是参考代码吧 |