start(1). delta(1, h, h, 2). delta(2, a, i, 3). delta(3, h, h, 2). delta(3, !, ?, 4). final(4). transduce([], [], State) :- final(State). transduce([InChar|InChars], [OutChar|OutChars], State) :- delta(State, InChar, OutChar, NextState), transduce(InChars, OutChars, NextState). eingabe(Input, Output) :- start(StartState), transduce(Input, Output, StartState).