format関数が使えないエラーの解決方法

このQ&Aのポイント
  • Emacs23でformat関数を評価するとエラーが発生し、使用できません。
  • 試しに*scratch*でformat関数を評価しても同様のエラーが出ます。
  • エラーメッセージは「wrong-type-argument stringp t」と表示されます。
回答を見る
  • ベストアンサー

format関数が使えません(Lisp)

Emacs23でformat関数を評価してもエラーが出て使うことができません。*scratch*で評価してもloadしても同じです。 例えば (format t "ddd") で Debugger entered--Lisp error: (wrong-type-argument stringp t) format(t "ddd") eval((format t "ddd")) eval-last-sexp-1(t) eval-last-sexp(t) eval-print-last-sexp() call-interactively(eval-print-last-sexp nil nil) このようなエラーが出て実行できません。 一体どうしてwrong-type-augumentとでるのかさっぱりわかりません。どなたか知恵を貸してください。

質問者が選んだベストアンサー

  • ベストアンサー
  • vaguechat
  • ベストアンサー率85% (47/55)
回答No.1

C-h f format でformat関数の説明を出して参考にした方がいい。 > (format t "ddd") で何をしたいのか見えないのだが、 formatは書式変換を行うための関数であり、説明に、 (format string &rest objects) とあるように、この関数の最初の引数には書式文字列を与える。 tは文字列ではないのでwrong-type-augumentが出る。 この関数の使い方としては、例えば、 (setq foo 123) (format "foo = %d, %05d, %x" foo foo foo) ならばformat関数は、 "foo = 123, 00123, 7b" を返す。 fooは123であり、一つ目はそのまま、二つ目は5桁0パディング、三つ目は16進数表示にしている。 要は二つ目以降の引数を評価したものを書式文字列で自分の望む形式に整え、 全体を一つの文字列にして返すのがformat関数。

whiteflare
質問者

お礼

回答ありがとうございます。自分は http://super.para.media.kyoto-u.ac.jp/~tasuku/format-func.html ここを参考にしたりしてEmacsでfizzbuzzつくったりしていました。作っているときにformat関数のエラーの解決ができなかったので、例としてとりあえず (format t "ddd") 上記の例を貼りました。 Emacs LispとCommon Lispのformat関数は仕様が違うみたいですね。 ありがとうございました。

関連するQ&A

  • Emacs Lisp: consセルと引用符?

    お世話になります。 Emacs Lispについて勉強しています 今は、リスト、consセルについて勉強しています。 以下、拙い質問になるかと思いますが、よろしくお願いします。 Lisp Interactionモードのバッファに、 '(1 2 3) というリストを書いて行末でC-jを押下すると (1 2 3) という式を返します。 しかし、 (1 2 3) という式を書いて行末でC-jを押下すると Debugger entered--Lisp error: (invalid-function 1) というエラーになります。 これは、1が関数、2と3が引数として評価されるからですね。 さて、リストではなく「consセル」を作るとします。 (1 . 2) と書いてC-jを押下すると、やはり Debugger entered--Lisp error: (invalid-function 1) というエラーになります。 '(1 . 2) であれば (1 . 2) と、正しくconsセルが出来ます。 '(1 . nil) であれば (1) というリストを返します。 これは、cdr部がnilであるconsセルはリストになるからですね。 では、3と、「1とnilからなるリスト」のconsセルを作って、結果的に(3 1)というリストにしようとします。 '(3 . '(1 . nil)) この場合は、予想に反して (3 quote (1)) となります。 '(3 . (1 . nil)) であれば、 (3 1) となります。一方、 (3 . (1 . nil)) とすると、 Debugger entered--Lisp error: (invalid-function 3) となります。 まとめると、 3と、「1とnilからなるリスト」のconsセルを作って、結果的に(3 1)というリストにしようとした場合は、 '(3 . (1 . nil)) のように外側のconsセルはクォートし、内側のconsセルはクォートしない、ということになりますね。 このクォートの振る舞いの違いはなぜでしょうか。 よろしくお願いします。

  • Emacs-Lispでの正規表現について

    例えば、以下のようなS式を評価した場合、"11" "12" "13"がヒットすると思います。 (search-forward "1[123]" nil t) しかし、私の環境では"11"や"12"ではなく"1[123]"にヒットしてしまいます。 [ ]や?等のメタキャラクターが機能していないようなのですが、どうすればメタキャラクターを有効化できるのでしょうか? ご教授宜しくお願い致します。 環境 OS:CentOS6.0 Emacs23.1.1 Lisp-interactionモードのscratchバッファに以下の様に書いて、C-jで評価しています。 (search-forward "1[123]" nil t) 12

  • Emacs Lisp: 関数に引数が渡せない?

    お世話になります。 ----------------------------------------- ; -*- lisp-interaction -*- ; このファイルはtest.elisというファイル名で、そのファイルを開いたバッファで実行 (buffer-name) ;;; ミニバッファに以下のように表示される ;;; "test.elis" (buffer-name "test.elis") ;;; ★引数を与えるとそのバッファ名を返すはず ;;; エラーになる ;;; Debugger entered--Lisp error: (wrong-type-argument bufferp "test.elis") (get-buffer "test.elis") ;;; ミニバッファに以下のように表示される ;;; #<buffer test.elis> (buffer-file-name) ;;; ミニバッファに以下のように表示される ;;; "/home/userName/test.elis" (buffer-file-name "test.elis") ;;; ★引数を与えるとそのバッファのファイル名を返すはず ;;; エラーになる ;;; Debugger entered--Lisp error: (wrong-type-argument bufferp "test.elis") ----------------------------------------- Emacs Lispの勉強として、上のようなファイルを開いて、各関数の括弧綴じ)の後ろでC-x C-eとタイプして実行し、挙動を調べています。 ★をつけたbuffer-nameおよびbuffer-file-name関数は、それぞれ引数を渡したバッファ名、および、そのバッファのファイル名が返ると思われるのですが、実際には上記のようにエラーになります。 これはどうしてでしょうか。 Emacsは23.4.1を使っています。 よろしくお願いします。

  • common lispのプログラミングについて

    色の英単語クイズをするプログラムが作りたいです。 イメージとしては =====hi!===== >ki yellow correct! >ao blue correct! >aka res wrong. >aka red correct! bye.(終了) というものです。 全部で5問あり、全ての問題が終了するとbye.と出てきたクイズが終わります。 (もし間違ってももう一回同じ問題が出ます。) これまでの成果としては、 (defun quiz () (princ "=====hi!=====") (terpri) (princ 'ao) (setq cc '((ki . yellow)(ao . blue)(aka . red) (cha . brown)(murasaki . purple))) (quiz-tr)) (defun quiz-tr () (cond ((eq cc nil) (pprint 'bye.)) (t (quiz-tr (print (cond ((eq (cdr (car (cdr cc))) (read)) 'correct!) (t 'wrong.))))))) という感じでご覧の通り、汎用性が全くないです。 末尾再帰などを使って5問まで回しながら、おのおのの問題について正誤判定していきたいのですが、非手続き型に慣れていないもので、良い案が浮かびません。 どなたかアドバイスを頂けると嬉しいです。

  • evalの中でNULLを使用して比較したい

    PHP5.2.4を使用しています。 次のようなevalを使って式を評価させたいのですが、 NULLを比較させると Parse error: syntax error, unexpected T_IS_NOT_EQUAL in test.php(11) : eval()'d code on line 2 というようなエラーがでてしまいます。 どうすればevalの中でこの条件式を成立させることができるのでしょうか? $left = NULL; $right = 1; $str = ' if('.$left.' != '.$right.') { print "not<br>\n"; } '; eval($str);

    • ベストアンサー
    • PHP
  • Eval関数を使いたい!ドキュメントにある宣言とはなに?

    Eval関数を使いたい!ドキュメントにある宣言とはなに? DataBinder.Eval メソッド にある DataBinder.Eval (Object, String, String) 実行時にデータ バインディング式を評価し、 結果を要求側のブラウザに表示されるテキストとして書式化します。 を使いたいです。 Visual Studio 2005のドキュメントで見つけました。 ドキュメントにある宣言とはなんですか? Visual Basic (宣言) Public Shared Function Eval ( _ container As Object, _ expression As String, _ format As String _ ) As String Visual Basic (使用法) Dim container As Object Dim expression As String Dim format As String Dim returnValue As String returnValue = DataBinder.Eval(container, expression, format) 宣言と使用方法が載っていましたが、使い方がわかりません・・・ ~~~~~~~~~~~~~~~~~~~~~~ 以下を書くと「名前'Eval'は宣言されていません」とエラーが出ます。 宣言がわかっていないので、当たり前といえば、当たり前です。 Dim myWork As String = "1+2+3+4" Dim myTotal As String = "" myTotal = Eval("myWork") これが使えるようにするにはどうしたらいいか教えてください!

  • Maximaのフーリエ変換について

    Maximaでフーリエ変換するために、 load(fft); で読み込んでから、 fft(exp(-t^2/18),t,w); を実行したところ、 Maxima encountered a Lisp error: Error in $FFT [or a callee]: $FFT [or a callee] requires less than three arguments. Automatically continuing. To reenable the Lisp debugger set *debugger-hook* to nil. というエラーが出てきて計算が出来ません。 どうしたら計算できるんでしょうか? わかる方教えてください。

  • xmaximaがつかえない

    こんばんは、質問よろしくお願いします。Xmaximaという、数式処理システムを興味があって、使ってみようとPlamolinux3.0にインストールしました。でも、ウインドウは $xmaxima で開くのですが、 --------------------------------------------------------------------- Maxima 5.6 2002年 8月 3日 (土) 16:04:19 JST (with enhancements by W. Schelter). Licensed under the GNU Public License (see file COPYING) Error: Caught fatal error [memory may be damaged] Fast links are on: do (si::use-fast-links nil) for debugging Error signalled by CATCH. Broken at MACSYMA-TOP-LEVEL. Type :H for Help. MAXIMA>> LISP-QUIET is not break command NIL MAXIMA>> LISP-QUIET is not break command NIL ---------------------------------------------------------------- などとエラーがでて、実際の計算ができません。メモリーがダメージをおう? とかかれても、それでどうすればいいのかわかりません。Lispがなにか関係あるのでしょうか。解決策がありましたら、是非御指導よろしくお願い致します。

  • Emacsのコマンド入力で、スペースを入力する方法

    こんにちは。 Emacsは、Gnu Emacs for Windows 23.4 を使っています。 eval-regionコマンドで、いくつかの式を評価した結果を、 別のファイルに出力したいと思っています。 マニュアルでは、eval-regionコマンドの説明は、以下のようになっていました。 ------------------------------------------------------------ コマンド: eval-region start end &optional stream read-function この関数は, カレントバッファのstartとendで指定した リージョン内のフォーム群を評価する. リージョンからフォームを読み取り, それらに対してevalを呼び出すことを リージョンの末尾に達するまで, あるいは, 処理されないエラーが知されるまで繰り返す. streamがnil以外ならば, リージョン内の式を評価した結果の値はstreamを使って表示する. see section 出力ストリーム. ------------------------------------------------------------ 上記の、startとendは、regionを設定した時に決まるものだと思います。 ある範囲をregionとして設定し、M-x eval-regionと入力したとに、 スペースキーを入力すると、ミニバッファには、[Sole completion] と表示され、上記のstreamを指定することができませんでした。 僕の環境では、M-xの後に、Lispコマンドを入力するときに、スペースキーを押すと、 スペースが入力されるのではなく、コマンド名の補完が行われます。 どうすれば、スペースを入力できるようになるのでしょうか? 何か御存じの方がいらっしゃれば、是非、情報を提供して頂きたく思います。 では、よろしくお願い致します。

  • Maximaでグラフを描くために

    http://www1.bbiq.jp/kougaku/maxima.htmlのサイトにしたがって、file:///C:/Documents%20and%20Settings/サムソン/Local%20Settings/Temporary%20Internet20Files/Content.IE5/2TC7QXU5/maxima_plot3d_graph%5B1%5D.png (z=√(x2+y2))のグラフを描こうとしたのですが、wxMaximaでplot3d(sqrt(x^2+y^2),[x,-100,100],[y,-100,100],[grid,20,20]);と入力すると ____ Maxima encountered a Lisp error: Error in PROGN [or a callee]: Cannot create the file C:/Documents and Settings/サム・ン/maxout.gnuplot.Automatically continuing.To reenable the Lisp debugger set *debugger-hook* to nil. ____ に出てきて、出力できませんでした。 ファイル名の途中にある「サム・ン」がいけないのかと思い、コマンドプロンプトをつたって「samson」に使用者名を変更して再度試してみたのですがやっぱりダメでした。 どなたかお教え下されば幸いです。

専門家に質問してみよう