Skip to content

Instantly share code, notes, and snippets.

@fffej
Created June 23, 2009 19:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fffej/134781 to your computer and use it in GitHub Desktop.
Save fffej/134781 to your computer and use it in GitHub Desktop.
(defn read-symbol
"Read a single symbol from a string returning nil on failure"
[s]
(read s false nil))
(defn get-response
"Get a response from the given string"
[s]
(with-open [r (PushbackReader. (StringReader. s))]
(let [x (doall (take-while #(not (nil? %)) (repeatedly #(read-symbol r))))]
(use-eliza-rules x))))
(defn eliza-ui []
(let [frame (JFrame. "Eliza")
pane (JPanel.)
user-input (JTextField.)
eliza-output (JLabel. "")
key-handler (proxy [KeyAdapter] []
(keyReleased [keyEvent]
(when (= (KeyEvent/VK_ENTER) (.getKeyCode keyEvent))
(let [input (.getText user-input)]
(.setText user-input "")
(.setText eliza-output (apply str
(interleave
(doall (get-response input))
(repeat \space))))))))]
(.addKeyListener user-input key-handler)
(doto pane
(.setLayout (BoxLayout. pane BoxLayout/Y_AXIS))
(.add (JLabel. "Eliza - How may I help?"))
(.add user-input)
(.add (JLabel. "Listen:"))
(.add eliza-output))
(doto frame
(.add pane)
(.setSize 300 300)
(.setVisible true))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment