2017-10-08 44 views
0

我想有這樣的列表替換嵌套列表元素...如何在方案

'((0 1 2) (3 4 5) (6 7 8) (0 3 6) (1 4 7) (2 5 8) (0 4 8) (2 4 6))

並更換一定數量的所有事件。

例如運行時

(replace 4 "x" '((0 1 2) (3 4 5) (6 7 8) (0 3 6) (1 4 7) (2 5 8) (0 4 8) (2 4 6)))

所需的輸出是

'((0 1 2) (3 x 5) (6 7 8) (0 3 6) (1 x 7) (2 5 8) (0 x 8) (2 x 6)))

我至今嘗試過是

(define (replace var player list) (if (null? list) '() (if (list? (car list)) (replace var player (cdr list)) (if (equal? var (car list)) (cons player (replace var player (cdr list))) (cons (car list) (replace var player (cdr list))) ))))

,當我運行全部更換1層的一個X輸出'(0 "x" 2)

回答

0

你是在正確的軌道上,你只是缺少實際應用功能上(car lst)只要第一個元素是列表本身,即:

... 
(if (list? (car list)) 
     (cons (replace var player (car list))   ;; missing this 
      (replace var player (cdr list))) 
     (if ... 

此外,避免使用內置過程作爲變量名稱(例如, list),並且在使用條件時,不是嵌套多個if語句,而是使用cond或其親屬更好地轉換爲常規if ... else if ... else ...的想法。