2015-11-05 16 views
0

有沒有辦法將list-ref調用的列表的單個值更改爲鍵入Racket中的不同值?鍵入球拍,更改列表中的單個組件

像:(更換(名單-REF(表1 2 2)O)4) 會輸出:(表4 2 2)

(: duck : (Listof Integer) -> (Listof Integer)) 
(define (duck n) 
    (match n 
    ['() '()] 
    [(cons x r) 
    (cond 
     [(= x (list-ref n 1)) 
     (cons 4 (duck r))] 
     [else (cons x (duck r))])])) 

我試圖這樣做,寫了這個遞歸函數,但它不起作用。我的邏輯如下:如果x是(list-ref n 1),則將x更改爲4.

任何幫助都非常感謝。

回答

0

list-set從不穩定/列表你想要做什麼:

#lang typed/racket/base 
(require/typed unstable/list 
       [list-set (All (a) (Listof a) Natural a -> (Listof a))]) 
(list-set (list 1 2 2) 0 4) 
; '(4 2 2) 

更新:

球拍的最新版本現在提供list-settyped/racket

#lang typed/racket 
(list-set (list 1 2 2) 0 4) 

或者,如果你想要使用typed/racket/base

#lang typed/racket/base 
(require racket/list) 
(list-set (list 1 2 2) 0 4)