アカウント名:
パスワード:
-- cooper
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
最初のバージョンは常に打ち捨てられる。
末尾再帰? (スコア:1)
#!/usr/bin/env gosh
(define (pos+ list)
(reverse
(let loop ((result '())
(tmp list)
(i 0))
(if (null? tmp)
result
(loop (cons (+ i (car tmp)) result)
(cdr tmp)
(+ i 1)))
)))
(define (main args)
(display (pos+ '
なるほど~ (スコア:1)
(define (pos+ list)
(let loop ((result '())
(tmp list)
(i 0))
(if (null? tmp)
(reverse result)
(loop (cons (+ i (car tmp)) result)
(cdr tmp)
-- cooper
再帰使わない版 (スコア:1)
#!/usr/bin/env gosh
(define (pos+ list)
(map
(let ((offset 0))
(lambda (arg)
(set! offset (+ offset 1))
(+ arg (- offset 1))))
list))
(define (main args)
(display (pos+ '(1 3 5 7)))
(newline))
;;; set!を使うなんてダサ過ぎ、と言われれば返す言葉もございません。
Re:再帰使わない版 (スコア:1)
#!/usr/bin/env gosh
(define (pos+ list)
(let ((offset 0))
(map
(lambda (arg)
(let ((i offset))
(set! offset (+ offset 1))
(+ arg i)))
list)))
(define (main args)
(display (pos+ '(1 3 5 7)))
(newline))
gauche, cool... (スコア:1)
(use gauche.sequence)
(define (pos+ list)
(map-with-index + list))
(define (main args)
(display (pos+ '(1 3 5 7)))
(newline))
;;; 再発明も再利用も楽しい
-- cooper
その他覚え書き用のカタログ (スコア:1)
(use srfi-1)
(define (pos+ list)
(map + (iota (length list)) list))
;;; ストレートな map
(define (pos+ list)
(map (let ((pos -1))
(lambda (arg)
(inc! pos)
(+ pos arg))) list))
-- cooper