mirror of
https://github.com/kennethreitz/elizagen.org.git
synced 2026-06-05 06:46:13 +00:00
97 lines
3.1 KiB
Plaintext
97 lines
3.1 KiB
Plaintext
(ELIZA CAN DECIDE IF A STRING OF LETTERS IS A PALINDROME.
|
|
TYPE THE WORD PALP FOLLOWED BY A STRING OF A AND B LETTERS,
|
|
WITH SPACES BETWEEN EACH LETTER. ELIZA WILL RESPOND TRUE IF
|
|
THE STRING IS A PALINDROME, OTHERWISE ELIZA RESPONDS FALSE.
|
|
EG. TYPE PALP A B B A AND ELIZA WILL RESPOND TRUE.)
|
|
|
|
(PALP
|
|
((PALP)
|
|
(PRE (* _ *) (=Q0))) ; position head at empty cell
|
|
((PALP A 0)
|
|
(PRE (* A * 3) (=Q0))) ; position head at first A
|
|
((PALP B 0)
|
|
(PRE (* B * 3) (=Q0))) ; position head at first B
|
|
((0)
|
|
(YOU MUST START WITH THE WORD PALP
|
|
AND FOLLOW THAT WITH ANY COMBINATION OF THE LETTERS
|
|
A AND B WITH SPACES BETWEEN EACH LETTER.)))
|
|
|
|
; Q=current state
|
|
; R=read this symbol at head
|
|
; W=write this symbol at head (blank means don't write anything)
|
|
; M=move head left (L) or right (R), or blank for don't move head
|
|
; Q'=new state
|
|
;
|
|
; In state Q, when the symbol at the head is R, then write W, move M
|
|
; and set the new state to Q'
|
|
|
|
|
|
; Q R W M Q'
|
|
(Q0
|
|
((* 0) (PRE (_ * 2) (=Q0)))
|
|
((0 *) (PRE (1 * _) (=Q0)))
|
|
((0 1 * A * 1 0) (PRE (1 2 _ * 6 * 7) (=Q1))) ; Q0 A _ R Q1
|
|
((0 1 * B * 1 0) (PRE (1 2 _ * 6 * 7) (=Q4))) ; Q0 B _ R Q4
|
|
((0 1 * _ * 1 0) (=QACCEPT))) ; Q0 _ QACCEPT
|
|
|
|
(Q1
|
|
((* 0) (PRE (_ * 2) (=Q1)))
|
|
((0 *) (PRE (1 * _) (=Q1)))
|
|
((0 1 * A * 1 0) (PRE (1 2 A * 6 * 7) (=Q1))) ; Q1 A R Q1
|
|
((0 1 * B * 1 0) (PRE (1 2 B * 6 * 7) (=Q1))) ; Q1 B R Q1
|
|
((0 1 * _ * 1 0) (PRE (1 * 2 * _ 6 7) (=Q2)))); Q1 _ L Q2
|
|
|
|
(Q2
|
|
((* 0) (PRE (_ * 2) (=Q2)))
|
|
((0 *) (PRE (1 * _) (=Q2)))
|
|
((0 1 * A * 1 0) (PRE (1 * 2 * _ 6 7) (=Q3))) ; Q2 A _ L Q3
|
|
((0 1 * B * 1 0) (=QREJECT)) ; Q2 B QREJECT
|
|
((0 1 * _ * 1 0) (=QACCEPT))) ; Q2 _ QACCEPT
|
|
|
|
(Q3
|
|
((* 0) (PRE (_ * 2) (=Q3)))
|
|
((0 *) (PRE (1 * _) (=Q3)))
|
|
((0 1 * A * 1 0) (PRE (1 * 2 * A 6 7) (=Q3))) ; Q3 A L Q3
|
|
((0 1 * B * 1 0) (PRE (1 * 2 * B 6 7) (=Q3))) ; Q3 B L Q3
|
|
((0 1 * _ * 1 0) (PRE (1 2 _ * 6 * 7) (=Q0)))); Q3 _ R Q0
|
|
|
|
(Q4
|
|
((* 0) (PRE (_ * 2) (=Q4)))
|
|
((0 *) (PRE (1 * _) (=Q4)))
|
|
((0 1 * A * 1 0) (PRE (1 2 A * 6 * 7) (=Q4))) ; Q4 A R Q4
|
|
((0 1 * B * 1 0) (PRE (1 2 B * 6 * 7) (=Q4))) ; Q4 B R Q4
|
|
((0 1 * _ * 1 0) (PRE (1 * 2 * _ 6 7) (=Q5)))); Q4 _ L Q5
|
|
|
|
(Q5
|
|
((* 0) (PRE (_ * 2) (=Q5)))
|
|
((0 *) (PRE (1 * _) (=Q5)))
|
|
((0 1 * A * 1 0) (=QREJECT)) ; Q5 A QREJECT
|
|
((0 1 * B * 1 0) (PRE (1 * 2 * _ 6 7) (=Q3))) ; Q5 B _ L Q3
|
|
((0 1 * _ * 1 0) (=QACCEPT))) ; Q5 _ QACCEPT
|
|
|
|
|
|
(QACCEPT
|
|
((0)
|
|
(TRUE)))
|
|
(QREJECT
|
|
((0)
|
|
(FALSE)))
|
|
|
|
(NONE
|
|
((0)
|
|
(TRY TYPING PALP A B A)
|
|
(TRY PALP A A A A)
|
|
(TRY PALP B A, ELIZA SHOULD RESPOND FALSE)
|
|
(TRY PALP B A B, ELIZA SHOULD RESPOND TRUE)))
|
|
|
|
(TURING
|
|
((0)
|
|
(MACHINE)))
|
|
|
|
(MEMORY TURING
|
|
(0 = TURING MACHINE)
|
|
(0 = TURING MACHINE)
|
|
(0 = TURING MACHINE)
|
|
(0 = TURING MACHINE))
|
|
|