Created
June 17, 2010 19:05
-
-
Save raek/442590 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;(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