Skip to content

Instantly share code, notes, and snippets.

@raek
Created June 17, 2010 19:05
Show Gist options
  • Save raek/442590 to your computer and use it in GitHub Desktop.
Save raek/442590 to your computer and use it in GitHub Desktop.
;(ns ditt.namespace.whatever
; (:import (javax.swing JOptionPane)))
(import 'javax.swing.JOptionPane)
(defn ask
"Ställer en fråga till användaren. Ger nil om användaren avbryter."
[title question]
(JOptionPane/showInputDialog nil question title
JOptionPane/QUESTION_MESSAGE))
(defn ask-the-user-seq []
(lazy-seq
(when-let [answer (ask "Din dattra undrar"
"Vad är nästa grej i sekvensen?")]
(cons answer (ask-the-user-seq)))))
;; (when cnd exp1 exp2 ...) är som (if cnd (do exp1 exp2 ...) nil)
;; when-let och if-let tar istället för ett villkor en bindingsform
;; och väljer gren beroende på om det värde som ska bindas är sant,
;; dvs inte nil eller false. I sant-grenen är variabeln bunden till
;; det värdet.
(comment ; Körexempel
(def s (ask-the-user-seq))
;; Tvingar fram ett värde
(first s)
;; Ger samma värde igen
(first s)
;;Ger falskt, ty resten är inte nil, utan en ny lat sekvens
(nil? (rest s))
;; samma som (seq (rest s)), ger nil om den lata sekvensen
;; representerar en tom sekvens. resten måste nu bestämma sig för
;; om den är tom eller ej. rest är en next som bevarar latheten.
(nil? (next s))
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment