Code: Select all
; (serial-substitute '(-> (A B) (B (A B)) (-> B (A C) (B C)))
; ((A abc) (B cde) (C xxx)))
;
; =>
;
; (-> (abc cde) (cde (abc cde)) (-> cde (abc xxx) (cde xxx)))
Code: Select all
(set 'serial-substitute6
(lambda(F s)
(eval (let((vars (map first s)))
(list 'local
vars
'(bind s)
(append '(expand F)
(map quote vars)))))))
(set 'formula '(-> (A B) (B (A B)) (-> B (A C) (B C))))
(set 'substitution ' ((A abc) (B cde) (C xxx)))
(println (serial-substitute6 formula substitution))
(exit)