Вот простая версия, которая работает:
(defn lookup
[k lol]
(let [the-map (into {}
(for [lst lol]
{(first lst) (second lst) } ))
result (get the-map k)]
result ) )
(lookup (quote b) (quote (((a b) 1) (c 2) (b 3)))) => 3
(lookup (quote [a b]) (quote (((a b) 1) (c 2) (b 3)))) => 1
(lookup (quote d) (quote (((a b) 1) (c 2) (b 3)))) => nil
Однако ваш код будет проще, если вы замените все цитируемые списки, такие как '(1 2 3)
, на векторы, подобные [1 2 3]
(don тогда не нужно использовать начальную кавычку) и заменить все символы в кавычках, например 'a
, на ключевые слова, подобные :a
(также не нужно заключать в кавычки символы.
Внесение этих изменений и добавление модульных тестов выглядит следующим образом Итак:
(ns tst.demo.core
(:use tupelo.core demo.core tupelo.test) )
(defn lookup
[k lol]
(get (into {} lol) k))
(dotest
(is= 3 (lookup :b [[[:a :b] 1] [:c 2] [:b 3]]))
(is= 1 (lookup [:a :b] [[[:a :b] 1] [:c 2] [:b 3]]))
(is= nil (lookup :d [[[:a :b] 1] [:c 2] [:b 3]])))
PS Пожалуйста, см. Brave Clojure для более подробной информации.
Обновление:
[ 1122] Нельзя использовать обычную функцию с этим синтаксисом:
(look-up b '(((a b) 1) (c 2) (b 3)))
, поскольку b
является символом и подразумевается как переменная , а не как часть данных .Вы можете выбрать:
b
в ключевое слово :b
, как я предлагал 'b
(болезненный и ошибочный -prone) lookup
(много работы за небольшую выгоду). Таким образом, я предложил пункт (1) в качестве предпочтительного решения.
Вот некоторый JavaScript.
var message = "The quick brown fox.";
var colors = new Array("#ff0000","#00ff00","#0000ff"); // red, green, blue
for (var i = 0; i < message.length; i++){
document.write("<span style=\"color:" + colors[(i % colors.length)] + ";\">" + message[i] + "</span>");
}
На серверной стороне можно сделать это достаточно легко без раздражающих поисковых систем AFAIK.
// This server-side code example is in JavaScript because that's
// what I know best.
var words = split(message, " ");
var c = 1;
for(var i = 0; i < words.length; i++) {
print("<span class=\"color" + c + "\">" + words[i] + "</span> ");
c = c + 1; if (c > 3) c = 1;
}
Если Вы действительно хотите очень простой встроенный HTML-код, запишите клиентский JavaScript, чтобы получить сообщение из данного P или DIV или безотносительно на основе его идентификатора, разделить его, повторно кодировать его как выше и заменить P или атрибут 'innerHTML' DIV.
Нет определенно никакого решения, использующего просто CSS, поскольку селекторы CSS не предоставляют Вам доступа к отдельным буквам (кроме :first-letter
).
Я не должен вручную генерировать изображение для каждой страницы
Затем генерируйте изображение автоматически.
Вы не указываете, какую технологию серверной стороны Вы используете, но любой, которого хороший позволит Вам управлять изображениями (или по крайней мере называть внешней утилитой изображения)
Таким образом, нетехнические пользователи должны были бы просто сделать что-то вроде этого:
<img src="images/redblueyellow.cfm/programs.png" alt="programs"/>
И redblueyellow.cfm сценарий затем или использовал бы существующий programs.png или генерировал бы новое изображение с несколькими цветами, как желаемый.
Я могу обеспечить демонстрационный CFML или псевдокодировать, чтобы сделать это, если Вы хотели бы?