我試圖實現兩個功能:子項和替換。打印和替換列表中的元素的函數
- subterm將兩個列表作爲參數,並在耗盡第二個列表後到達的第一個列表中打印該元素。
例如,調用
(subterm '(1 2 (3 4 5) (6 (7 (8) 9 10))) '(4 2 2 1))
應該返回
8
我想出了以下功能,打印第n個元素的列表:
(define (subterm list n)
(cond
((null? list) '())
((= n 1) (car list))
(else (subterm (cdr list) (- n 1)))))
- replace需要3個列表,並返回替換已達到值的結果,其餘列表不變。
例如呼叫:
(replace '(1 2 (3 4 5) (6 (7 (8) 9 10))) '(11 12) '(4 2 2 1))
應該返回:
'(1 2 (3 4 5) (6 (7 ((11 12)) 9 10)))
再次,我想出了這個代碼,它取代與第二列表的第一個列表中的第n個元素,留下其餘第一個清單不變:
#lang racket
(define (replace list elem n)
(cond
((empty? list) empty)
((eq? n 1) (cons elem (cdr list)))
(#t (cons (car list) (replace (cdr list) elem (- n 1))))))
如何修改這些函數以獲取兩個列表?
編輯1: 一些例子:
> (subterm '(1 2 3 4 5) '(3))
3
> (subterm '(1 2 3 4 5) '(2))
2
> (subterm '(1 2 (3 4 5) 6 7) '(3 2))
4
考慮這個例子:
> (subterm '(1 2 (3 4 5) (6 (7 (8) 9 10))) '(4 2 2 1))
8
在上述例子中,subterm需要2名列表。然後它讀取第二個列表。第二列表基本上告訴子項返回第四元素(6(7(8)9 10))的第二元素(7(8)9 10)的第二元素((8))的第一元素(8)第一列表(1 2(3 4 5)(圖6(圖7(8)9 10)))
> (subterm '1 '())
1
> (subterm '(1 2 (3 4 5) (6 (7 (8) 9 10))) '())
'(1 2 (3 4 5) (6 (7 (8) 9 10)))
> (replace '(1 2 3 4 5) '(6 7 8) '(3))
'(1 2 (6 7 8) 4 5)
> (replace '(1 2 3 4 5) '(6 7 8) '(2))
'(1 (6 7 8) 3 4 5)
考慮這個例子:
> (replace '(1 2 (3 4 5) 6 7) '(8 9) '(3 2))
'(1 2 (3 (8 9) 5) 6 7)
替換髮生在三個列表:第一列表是元素必須被替換的列表,第二個列表包含必須放入第一個列表的新元素,第三個列表包含元素必須被替換的位置 因此,它基本上取代了第二個元素元素(4)第一個列表的第三個元素(3 4 5)(1 2(3 4 5)6 7)。
> (replace '(1 2 (3 4 5) (6 (7 (8) 9 10))) '(11 12) '(4 2 2 1))
'(1 2 (3 4 5) (6 (7 ((11 12)) 9 10)))
> (replace '(1 2 (3 4 5) (6 (7 (8) 9 10))) 1000 '(4 2 2 1))
'(1 2 (3 4 5) (6 (7 (1000) 9 10)))
> (replace '(1 2 (3 4 5) (6 (7 (8) 9 10))) 'x '())
'x
> (replace '1 '(2 3 4) '())
'(2 3 4)
當你說這些功能_時,你指的是什麼?是否有可能使'替換'的元數等於2?在我看來,你錯過了一些解釋。 –
@DavidMerinos:這些功能的含義是子目錄和替換。爲了清晰起見,我添加了一些示例。謝謝! – no10downingstreet
好的。我明白了這些功能的作用,但究竟是什麼問題呢?你想'替換'只接受**兩個列表? –