[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有些类似,但好像没有要求启用扩展,具体还是参考代码吧
Global site tag (gtag.js) - Google Analytics