2012-01-05 7 views
2

Land of Lisp's Dice of Doom gameを実装しようとしていて、Don't know how to create ISeq from: clojure.lang.PersistentList$1を取得しています。

add-new-dice関数を呼び出すとき、それが発生しています:私はCLコードで自分自身を理解し、それを超える移植いくつかの経験を得るために、主にこれをやっている

(add-new-dice '[(0 1) (1 3) (0 2) (1 1)] 0 2) 

:これで

(defn add-new-dice [board player spare-dice] 
    (letfn [(f [lst n] 
      (cond (empty? lst) nil 
        (zero? n) lst 
        :else (let [current-player (first (first lst)) 
           current-dice (first (rest (first lst)))] 
          (if (and (= current-player player) (< current-dice *max-dice*)) 
          (cons (list current-player (+ current-dice 1)) 
            (f (rest lst) (- n 1))) 
          (cons (first lst) (f (rest list) n))))))] 
    (f board spare-dice))) 

をClojure。

誰かが私に助言を与えることができれば、それは分かります。

+0

ですが、私はClojureを使ってDoomのDiceのすべてのバージョンを入手しました(ただし、私は自宅のローリングWebサーバーではなくCompojureを使用しました)。あなたが私のやり方を見たいと思ったら教えてください。私のコードは一般的なリリースには十分ではありません:( –

+0

こんにちはAdrian、後でそれについてチャットするのですか?)CLの怠惰をlazy-seqに移植する方法を理解している歯がありません: – toofarsideways

+0

こんにちはtoofarsideways、私に電子メールを送るだけのベスト:私はGmailのadrian.mouatです。どの国/タイムゾーンにいるのかを教えてください。 –

答えて

7

引数lstの代わりに、関数listを最後の2行目に使用しています。 (f (rest list) n)(f (rest lst) n)

+0

ありがとうJoost、それは真剣に私の部分に誤ったタイプミスでした。私はこのことのどの部分が誤解されているのか、夢中に思っていました。とても有難い! – toofarsideways

+1

これは、clojureがLisp-1(関数と "変数" /引数がすべて同じ名前空間を占めることを意味する)であるという潜在的な問題です。シーケンスの名前をもっと便利にすることができない場合は、clojure標準ライブラリの命名規則を使用し、一般的なseq'ableコレクションに "lst"の代わりに "coll"を使用する方が良いかもしれません(個人的にはプレーンシーケンスとマップのための "m") –

+0

私自身の啓発のために、なぜ、seqを関数に置き換えるタイプミスが例外を生成したのか説明してもらえますか? clojure.lang.PersistentListは 'list'関数のデータ形式ですか? –

関連する問題