Вот немного примера кода:
(deftype Deck52 [suits] :as this
DeckOfCards
(check-empty []
(Deck52. (apply hash-map
(apply concat (remove (-> nil?)
(for [[key val] suits]
(if (empty? val) nil [key val])))))))
(remove-card [suit card]
(assoc suits suit (remove #(= card %) (suit suits))))
(get-card [suit]
(let [suitd (suit suits)]
[(first suitd) (check-empty (Deck52. (assoc suits suit (rest suitd))))]))
(random-card []
(let [suitn (+ 1 (rand-int 4))]
(cond (= suitn 1) (get-card this :hearts)
(= suitn 2) (get-card this :diamonds)
(= suitn 3) (get-card this :clubs)
(= suitn 4) (get-card this :spades)))))
Я также отправил этот код в Сути здесь, если легче читать: http://gist.github.com/307425 (не идущий нигде).
Основной пример здесь check-empty
. Я испытал большие затруднения при знании, где я должен и не должен поражать возврат, и я все еще не знаю, сделал ли я его правильно. Это угрожает обойти сразу же правую сторону экрана, но это - путь отступы clojure-режима, и я предполагаю, что это, как предполагается, похоже на это.
Так, вопрос, когда время это для размещения новой строки в код Clojure/Lisp? Я - 'doin' это обряд'?
Примечание: Я не могу обещать, что код отправил работы. Я делал некоторое экспериментирование, и некоторыми вещами мог бы быть простой sucky, если не поврежденный.
То, как вы разорвали линии, вполне нормально. Я бы сделал некоторые небольшие изменения.
->
и - >>
помощники, condp, when, ... Вот как я бы это сделал. (Отказ от ответственности: мой стиль. Ваш может быть другим. YMMV!)
(deftype Deck52 [suits] :as this
DeckOfCards
(check-empty
[]
(->> (for [[key val] suits]
(when-not (empty? val)
[key val]))
(remove nil?)
(apply concat)
(apply hash-map)
Deck52.))
(remove-card
[suit card]
(assoc suits suit (remove #(= card %) (suit suits))))
(get-card
[suit]
(let [suitd (suit suits)]
[(first suitd)
(->> (rest suitd)
(assoc suits suit)
Deck52.
check-empty)]))
(random-card
[]
(let [suitn (+ 1 (rand-int 4))]
(condp = suitn
1 (get-card this :hearts)
2 (get-card this :diamonds)
3 (get-card this :clubs)
4 (get-card this :spades)))))
Хотя следующее не является частью вашего вопроса, я не могу устоять:
(deftype Deck52 [suits] :as this
DeckOfCards
(check-empty
[]
(->> suits (remove (comp nil? seq val)) (into {}) Deck52.))
(remove-card
[suit card]
(update-in suits [suit] #(remove %2 %1) #(= card %)))
(get-card
[suit]
(let [suitd (get suits suit)]
[(first suitd)
(->> (rest suitd) (assoc suits suit) Deck52. check-empty)]))
(random-card
[]
(case (rand-int 4)
0 (get-card this :hearts)
1 (get-card this :diamonds)
2 (get-card this :clubs)
3 (get-card this :spades))))
"Android-Way" (если это только два уровня иерархии) будет использовать ExpandureListView . Это можно найти в демонстрационном проекте API.
Чтобы реализовать что-то действительно идентичное поведению iPhone, я уверен, вы должны пройти тяжелый путь реализации этого самостоятельно.
Кажется, трудно реализовать это в Android. Посмотрим, что другие предложат!
-121--4407340-Самый простой способ запустить cron через CodeIgniter - сделать URL cron доступным через ваше приложение.
Затем вызовите его через wget
wget -O - -q -t 1 http://www.example.com/cron/run
Внутри контроллера можно использовать журнал, чтобы убедиться, что cron не выполняется слишком часто, т.е. если роботы Google запускают его по ошибке.
Вторым методом было бы использование рыси
/usr/local/bin/lynx -source http://www.example.com/cron/run
-121--1728893- , когда вещи пытаются вырваться с правой стороны я склонен к его входа после первого аргумент для каждого вызова. это только отступы на фиксированную сумму в строке.
(check-empty []
(Deck52.
(apply
hash-map
(apply
concat
(remove
(->
nil?)
(for [[key val] suits]
(if (empty? val) nil [key val])))))))
clojure-mode для Emacs не обязательно дает правильные отступы. Я говорю, старайтесь, чтобы длина ваших строк не превышала 80 символов, и будьте последовательны.