0

私はいくつかの関数を持ってfuncいて、リストに適用したいlstので、使用しましたが、リストmapの最初と最後の要素を他の関数で評価する必要がありますfunc2

だから基本的に私はこれが欲しい:

(map (lambda (x)
       (cond [(isBeginningOfList? lst) (func2 x)]
             [(isEndOfList? lst) (func2 x)]
             [else (func x)]))
     lst)

明らかにこれは機能しません。

この機能を実現するにはどうすればよいですか? 各リストエントリのキーをどうにか取得できますか? いいねlambda(key,val)してから比較(equal? key 0)/ (equal? key (length lst))?

4

2 に答える 2

4

for/listwithがありin-indexed、それはあなたが説明することを行います:

(define (f lst f1 f2)
  (define last (sub1 (length lst)))
  (for/list (((e i) (in-indexed lst)))
    (if (< 0 i last)
        (f1 e)
        (f2 e))))

それから

> (f '(1 2 3 4 5) sub1 add1)
'(2 1 2 3 6)
于 2014-12-14T17:11:35.703 に答える