复制功能
Replicate Function
我正在尝试重写函数 replicate 的代码,该函数将列表的第一项重复 n 次,然后 returns 列表包含重复的第一项和列表的其余部分。这是原始函数:
(check-expect (replicateone 1 '(stays the same)) '(stays the same))
(check-expect (replicateone 0 '(hello bye)) '(bye))
(check-expect (replicateone 3
'(repeat second third ))
'(repeat repeat repeat second third))
(define (replicateone n nonemptylist)
(cond [(zero? n) (rest nonemptylist)]
[else
(cons (first nonemptylist) (replicateone (sub1 n) nonemptylist))]))
这是我现在拥有的,但它不起作用。
(define (iterate f n x)
(cond
[(zero? n) x]
[else (iterate f (sub1 n) (f x))]))
(define (replicateone n nonemptylist)
(iterate (λ (x) (list x x)) n nonemptylist))
我正在尝试在没有所有递归的情况下在 ISL+ 中执行此操作,但我不确定如何使用新技术编写迭代函数。我觉得这会用到foldr,但我不太确定。
任何帮助都会很棒,因为我还在学习。
谢谢
这是我使用 iterate
的方法:
(define (replicateone n lst)
(iterate (lambda (x) (cons (first lst) x)) n (rest lst)))
这里是 iterate
的 "an" 实现,它不使用直接递归并且 运行 使用 ISL+ 正确执行,但是,它(有意)被混淆了。尝试弄清楚它是如何工作的,你会很开心。 ;-)
(define (iterate f n x)
(foldl (compose f second list) x (make-list n #f)))
我正在尝试重写函数 replicate 的代码,该函数将列表的第一项重复 n 次,然后 returns 列表包含重复的第一项和列表的其余部分。这是原始函数:
(check-expect (replicateone 1 '(stays the same)) '(stays the same))
(check-expect (replicateone 0 '(hello bye)) '(bye))
(check-expect (replicateone 3
'(repeat second third ))
'(repeat repeat repeat second third))
(define (replicateone n nonemptylist)
(cond [(zero? n) (rest nonemptylist)]
[else
(cons (first nonemptylist) (replicateone (sub1 n) nonemptylist))]))
这是我现在拥有的,但它不起作用。
(define (iterate f n x)
(cond
[(zero? n) x]
[else (iterate f (sub1 n) (f x))]))
(define (replicateone n nonemptylist)
(iterate (λ (x) (list x x)) n nonemptylist))
我正在尝试在没有所有递归的情况下在 ISL+ 中执行此操作,但我不确定如何使用新技术编写迭代函数。我觉得这会用到foldr,但我不太确定。
任何帮助都会很棒,因为我还在学习。
谢谢
这是我使用 iterate
的方法:
(define (replicateone n lst)
(iterate (lambda (x) (cons (first lst) x)) n (rest lst)))
这里是 iterate
的 "an" 实现,它不使用直接递归并且 运行 使用 ISL+ 正确执行,但是,它(有意)被混淆了。尝试弄清楚它是如何工作的,你会很开心。 ;-)
(define (iterate f n x)
(foldl (compose f second list) x (make-list n #f)))