键入的球拍,更改列表中的单个组件

时间:2015-11-05 16:52:03

标签: list recursion racket typed-racket

有没有办法将list-ref调用的列表的单个值更改为键入的Racket中的其他值?

喜欢:(更改(list-ref(list 1 2 2)0)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。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

来自unstable / list的

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)

<强>更新

最新版本的球拍现在提供typed/racket的{​​{3}}:

#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)