我有一个函数,它接受变量长度的参数列表。取决于它的长度,我必须调用另一个函数,但参数长度不同。您可以看到下面的功能:
(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条款还可以再长一些。这是可行的,但绝对不恰当。
有更好的方法来填补这个功能吗?
发布于 2013-08-13 05:51:39
这个想法的直接翻译如下:
(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))))但是,由于您实际上没有使用参数,而是获得参数计数,这似乎很可疑。你想做什么?
发布于 2013-08-13 13:20:18
使用申请?
(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))))))当然比做人类编译器强
https://stackoverflow.com/questions/18200938
复制相似问题