Gegeben chars
- eine Liste von Zeichen und words
- und Liste der Wörter. Ich möchte alle möglichen Permutationen von Sätzen von gegebenen words
Liste finden, die alle chars
verwenden.Schema: Verwenden von Backtracking zu Satzvertauschungen gegeben gegeben Chars-Liste und Wörterliste
Zum Beispiel:
chars = '(i l o v e t e l e v i s i o n)
words = '((i) (l o v e) (v i s i o n) (t e l e) (t e l e v i s i o n))
So (find-permutations '(i l o v e t e l e v i s i o n) '((i) (l o v e) (v i s i o n) (t e l e) (t e l e v i s i o n)))
ausgeführt wird folgendes Ergebnis ergeben:
(((i) (l o v e) (t e l e) (v i s i o n)) ((i) (l o v e) (t e l e v i s i o n)))
ich mit dem folgenden Code Schema Sprache geschrieben:
(define (substr sub str)
(cond ((null? sub) str)
((null? str) #f)
((eq? (car sub) (car str)) (substr (cdr sub) (cdr str)))
(else #f)))
(define (find-permutations chars words)
(define (helper chars words1 result)
(cond ((null? chars) (reverse result))
((null? words1) null)
((eq? chars #f) #f)
(else (let* (
(x (substr (car words1) chars))
(y (helper x words (cons (car words1) result)))
(w (helper chars (cdr words1) result))
)
(if x
(cons y w)
w)
)
)
)
)
(trace helper)
(helper chars words())
)
, aber ich habe zu viele Klammern: ((((((i) (l o v e) (t e l e) (v i s i o n))) ((i) (l o v e) (t e l e v i s i o n)))))
Ich kann nicht finden, warum. Kann jemand eine Idee haben?