2011-12-08 15 views
0

Clojureの学習を始めたばかりです。各URLの周りにいくつかの追加のメタデータを入れて、WebページからいくつかのURLをメモリに取り込もうとしています。Clojureの設定でネストされたHashMapを持つ空のベクトル

URLを取得できますが、問題が発生している場所に保存しています。私は、ネストされたマップを持つベクトルが必要であることを理解しました。新しいレコードをassoc-inに追加することはできますが、私はURLを知らないので、データ構造を最初に定義する方法がわかりません。例えばので

(def *comics* 
    [{:name "Penny-Arcade" 
    :url "http://www.penny-arcade.com/comic/" 
    :working 0 
    } 
    {:name "We The Robots" 
    :url "http://www.wetherobots.com/" 
    :working 0 
    }]) 

私は、私はそれでデータのない上記のデータ構造を起動する方法だけではわからない、それは、コマンドライン引数から最初から、その後残りを言う追加ウェブサイト

誰かが上記のデータを保存するより良い方法を提案できる場合は、お気軽にお問い合わせください。

答えて

2

私は、あなたの*comics* varをいくつかのコマンドライン引数から修正し、その中の要素に "働いて"いる間にさらに修正したいと思っています。

私はあなたにお勧めしますをしないでください。

漫画のURLをコマンドラインから取り出して、処理を行う関数に引数として渡すことはできず、それらのURLから必要なものを返します。そんなことをやっている - そうだ。機能的には、バールを変えることなく - 確実に簡単に実装できるようになり、並列化が容易になり、より慣用的で楽しいものになります。

+0

また、RefのようなSTM抽象化を使用すると、さまざまな時点でアプリケーションフロー全体を通してこのデータを更新する必要がある場合があります。 – Ankur

+0

最初にコマンドラインから最初のURLを入力してから、ストアするURL。同時実行性を使用するアプリケーションの別の部分は、それらのURLがまだ動作していることを検証します。私はそれがまだ可能かどうかはわかりませんでしたが、STMはそうすることができるように聞こえます。 – Dale

+0

@Daleは、URLの突然変異ストアではなく、再帰的な関数呼び出しが必要なように聞こえると思います。あなたは間違いなく、ストレージの変更を構築するために参照数/原子などを使用することができますが、それはあなたが*必要ではないことが既に明らかであるときにあなたの問題を解決するための最善の方法であるという前提から始まらないでしょう。 –

関連する問題