3

テキスト ベースの Clojure ゲームを作成しようとしています (Land of Lisp に触発されました)。

(def *nodes* {:living-room "you are in the living-room. a wizard is snoring loudly on the couch."
              :garden "you are in a beautiful garden. there is a well in front of you."
              :attic "you are in the attic. there is a giant welding torch in the corner."})

(defn describe-location [location nodes]
    (nodes location))

コードは REPL で実行されていますが、コードをファイルに保存して実行しようとすると、次のようになります。

(describe-location :attic *nodes*)

私が得た:

スレッド「メイン」の例外 java.lang.IllegalArgumentException: 間違った数の引数 (1) が渡されました: user$describe-location (wizard-game.clj: 0)

私が間違っていることは何ですか?
ファイルは次のとおりです: http://dl.dropbox.com/u/3630641/wizard-game.clj

4

2 に答える 2

3

かっこが多すぎます。の代わりに(describe-location(:garden *nodes*))、が必要です(describe-location :garden *nodes*)

関数の名前は、前ではなく、開いた親の(:garden *nodes*)にあることに注意してください。結果を呼び出してから呼び出していましたが、1つではなく2つの引数が必要なdescribe-locationため失敗しました。describe-location

于 2011-03-05T00:57:52.430 に答える
0

潜在的な問題の 1 つは、'user' 名前空間の repl にロードされた関数のバージョンが期待したものではない可能性があることです(load "wizard-game.clj")。最近では多くの人がこれに leiningen を使用していますが、maven を直接使用するかなりの数の人を除きます。


最初にゲームに名前空間を与えます

(ns com.me.myGame ....)

次に、実行してreplにロードできます

(use 'com.me.myGame)

名前空間で修飾された名前のいずれかで関数を呼び出します

(com.me.myGame/describe-location :attic)

または repl スイッチからその名前空間に:

(in-ns 'com.me.myGame)
(describe-location :attic)


または、leiningen を使用してプロジェクトと名前空間を自動的に作成することもできます。この場合、leiningen は価値があります。なぜなら、lein でプロジェクトを作成するよりも、この文章を書くのに時間がかかったからです。leiningen には優れたチュートリアルがたくさんあります。

lein new wizard-game

src/wizard-game/core.clj を編集します。これにより、プロジェクトが世界的に有名な成功を収めた場合に、後で大騒ぎせずに依存関係を追加できます

于 2011-03-05T00:18:35.830 に答える