Мне нужно создать конструктор конечной машины, который принимает все префиксы языка данной машины. Скажем, язык машины M1 L (M1) = "abba", тогда конструктор должен создать новую машину M2 такую, что L (M2) = {empty, a, ab, abb, abba}
Теперь в библиотеке есть конструктор под названием fsm, и его прототип выглядит так:
(make-fsa list-of-states alphabet starting-state list-of-final-states list-of-rules)
;List-of-rules is the list of transitions such as (q0 a q1)
;the function returns a finite state machine
Я пытаюсь сделать каждое состояние конечным. Но так ли это работает?
Код ниже - это то, что у меня есть на данный момент:
#lang racket
(require fsm) ;provides the constructor and getters
(define M1
(make-dfa ;constructor, provided by the fsm library
'(q0 q1 q2) ;states
'(a b) ;alphabet
'q0 ; starting state
'(q2) ;list of final states
'((q0 a q1) ;list of rules
(q0 b q0)
(q1 a q0)
(q1 b q2)
(q2 a q2)
(q2 b q2))))
; new constructor
(define M2
(make-dfa
(sm-getstates M1) ;sm-getstates is a getter that gets a certain machine's states
(sm-getalphabet M1) ;sm-getalphabet is a getter that gets a certain machine's alphabet
(sm-getstart M1) ;sm-getstart is a getter that gets a certain machine's starting state
(sm-getstates M1) ; TURNING EVERY STATE IN M1 A FINAL STATE, BUT DOES IT WORK?
(sm-getrules M1))) ;sm-getrules is a getter that gets a certain machine's list of rules