首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有可变参数长度的调用函数

具有可变参数长度的调用函数
EN

Stack Overflow用户
提问于 2013-08-13 04:52:52
回答 2查看 290关注 0票数 2

我有一个函数,它接受变量长度的参数列表。取决于它的长度,我必须调用另一个函数,但参数长度不同。您可以看到下面的功能:

代码语言:javascript
复制
  (define (set-contents . args)
   (define columns-length (length args))
        (cond
          ((= columns-length 1) 
           (send output-list set (empty-list rows-length) (get-nth-item columns-as-list 0)))
          ((= columns-length 2) 
           (send output-list set (empty-list rows-length) (get-nth-item columns-as-list 0) (get-nth-item columns-as-list 1)))
          ((= columns-length 3) 
           (send output-list set (empty-list rows-length) (get-nth-item columns-as-list 0) (get-nth-item columns-as-list 1) (get-nth-item columns-as-list 2)))
          ((= columns-length 4) 
           (send output-list set (empty-list rows-length) (get-nth-item columns-as-list 0) (get-nth-item columns-as-list 1) (get-nth-item columns-as-list 2) (get-nth-item columns-as-list 3)))

这个cond条款还可以再长一些。这是可行的,但绝对不恰当。

有更好的方法来填补这个功能吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-13 05:51:39

这个想法的直接翻译如下:

代码语言:javascript
复制
(define (set-contents . args)
  (send/apply output-list set (empty-list rows-length)
                              (for/list ((i (length args)))
                                (get-nth-item columns-as-list i))))

但是,由于您实际上没有使用参数,而是获得参数计数,这似乎很可疑。你想做什么?

票数 2
EN

Stack Overflow用户

发布于 2013-08-13 13:20:18

使用申请?

代码语言:javascript
复制
(define (set-contents . args)
  (define columns-length (length args))
  (apply send (append (list output-list set '()) 
                      (take column-length columns-as-list))))

(define (take num lst)
  (cond ((< num 1) '())
        ((null? lst) (error "Cannot TAKE from the empty list")
        (else (cons (car lst) (take (- num 1) (cdr lst))))))

当然比做人类编译器强

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18200938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档