このコードは、一人称の単語を二人称の単語に、またはその逆に置き換えます。ただし、フレーズ内の各単語の各ペアを通過するため、元に戻る場合があります。
コードは次のとおりです。
(define (replace pattern replacement lst replacement-pairs)
(cond ((null? lst) '())
((equal? (car lst) pattern)
(cons replacement
(many-replace (cdr replacement-pairs) (cdr lst))))
(else (cons (car lst)
(many-replace (cdr replacement-pairs) (cdr lst))))))
(define (many-replace replacement-pairs lst)
(cond ((null? replacement-pairs) lst)
(else (let ((pat-rep (car replacement-pairs)))
(replace (car pat-rep)
(cadr pat-rep)
(many-replace (cdr replacement-pairs)
lst) replacement-pairs)))))
(define (change-person phrase)
(many-replace '((i you) (me you) (am are) (my your) (are am) (you i) (your my))
phrase))
たとえば、私が入力した場合
(change-person '(you are not being very helpful to me))
それはあなたを私に変えますが、それからあなたに戻ります。これを修正するにはどうすればよいですか?