Donnée chars
- une liste de caractères et words
- et une liste de mots. Je souhaite trouver toutes les permutations possibles des phrases de la liste words
donnée qui utilisent tous chars
.Schéma: utiliser backtracking pour trouver des permutations de phrases liste liste de caractères et liste de mots
Par exemple:
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))
donc en cours d'exécution (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)))
donnera le résultat suivant:
(((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)))
j'ai écrit le code suivant en utilisant le langage Scheme:
(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())
)
mais je m'y suis trop entre parenthèses: ((((((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)))))
je ne peux pas trouver pourquoi. Quelqu'un peut-il avoir une idée?