0

私はLispを使い始めようとしていますが、タイトルとURLをユーザーに尋ねることができるようにしたい(厄介な)コードがいくつかあります。

それらを変数に保存し、呼び出されたときに出力します。しかし、私は問題にぶつかっています。まず第一に、プログラムをコンパイルして実行する方法がわかりません。また、一度実行したときに、変数のタイトルが呼び出されていないというエラーが発生しました。誰かがこれらのことのいずれかで私を助けることができますか?申し訳ありませんが、エラーに関する詳細情報を提供することはできません。

;;Define a function called make-cd that takes four parameters
(defun make-url( title url ))
    (list :title title :url url)

;;In the make-url function create a plist that takes the passed values


;; Define global variable db and set its value to nil
(defvar *db* nil)

;; Define a function that takes one paramter and pushes it to the make-url func.
;;(defun add-url (url) (push url *db*))

;; Define a function that takes the *db* variable and makes the output pretty
(defun dump-db ()
   (dolist (url *db*)
       (format t "~{~a:~10t~a~%~}~%" url)))

(defun prompt-read (prompt)
  (format *query-io* "~a: " prompt)
  (force-output *query-io*)
  (read-line *query-io*))
4

2 に答える 2

1

おそらくこれは役立つでしょう。

Lispプログラムは必ずしもコンパイルされた形で配布されるとは限りません。プログラムをソースコードとして使用する方が、FASLのみを使用するよりも優れています(Lispバイナリの呼び出し方法です)。問題が後で見つかった場合に問題を修正するのが簡単になるためです。

従来、より複雑なプログラムは、ASDFパッケージasdf:defsystemマクロを使用して配置されていました。詳細については、http://common-lisp.net/~mmommer/asdf-howto.shtmlを参照してください。Quicklispを使用し、その~/quicklisp/dists/quicklisp/software/<name of the program>/ディレクトリを調べて他のプログラムがどのように配置されているかを確認することで、これが通常どのように行われるかについての例をインターネットで見つけることができます。

システムがによって定義されるasdf:defsystemと、それを「操作」するために使用asdf:oosします。つまり、システムをロードします。ただし、Quicklispは、Lispシステムを操作するための非常に人気があり使いやすいユーティリティになっています(下にもASDFパッケージを使用しています)。だから、あなたがそれを持っていることを考えると、あなたはそうするでしょう(ql:quickload "your-system")

Quicklispを介してシステムをローカルで使用できるようにするには、次のようにすることをお勧めします。ファイル内の$HOMEディレクトリ(Linuxでは通常チルダでエイリアス化され~ます):(~/.config/common-lisp/source-registry.confまだ存在しない場合は作成する必要があります) )、次のようなものを追加します:

(:source-registry
 (:tree (:home "quicklisp/quicklisp/"))
 (:tree (:home "Projects/my-project/"))
 :inherit-configuration)

上記は、~/Projects/my-project/ディレクトリにシステム定義ファイル(* .asd)が含まれていることを意味します。このファイルには、システムに属するファイルを記述し、それらのロード方法などを指示します。

ローカルプロジェクトを追加するための他のオプションについては、QuicklispFAQをお読みください

source-registry.confファイル形式の詳細については、ASDFマニュアルを参照してください。

これは最初は少し複雑なので、Quicklispを使用して1つのプロジェクトをインストールし、それがどのように作成されるかを調べることをお勧めします。アレクサンドリアは良いスタートになるかもしれません-一般的に便利なパッケージであることに加えて、それはそれほど大きくはなく、問題を非常によく示しています、IMO。

于 2012-11-08T08:33:55.630 に答える
0

指定したコードにはエラーが含まれているため、コンパイルされません。エラーはmake-urlの定義にあります。適切な定義は次のとおりです。

(defun make-url(title url)
      (リスト:タイトルタイトル:url url))

括弧の配置の違いに注意してください。

コードでは、パラメーターリストの後に追加の括弧があります。これにより、defunが閉じられ、make-urlが本体のない関数として評価されるようになりました。次の行は、組み込み関数リストへの呼び出しとして評価されました。引数が評価され、titleの値を見つけようとしたときにエラーが発生しました。グローバル環境にはバインディングはありません。タイトルのバインディングは、make-urlの本体内にのみ存在します。

また、add-urlの定義はコメント化されています。セミコロンはLispでコメントを開始します。

プログラムをコンパイルして実行する方法は、使用しているコンパイラによって異なります。SBCLを使用している場合、関数はsb-ext:save-lisp-and-dieです。このような単純なプログラムは通常、Read-Eval-Print-Loop(REPL)で実行され、ほとんどのコンパイラーは起動時に1つを入力します。SBCLがインストールされている場合は、コマンドプロンプトにコマンド「SBCL」を入力してreplを開始できます。コードが外部ファイルにある場合は、Loadを使用してそれをロードできます。

于 2012-11-08T01:30:13.813 に答える