Cからlispへの変換 (ただの出力)
CをLispに変換するだけなのだけど、簡単な出力を意外と理解してないことに愕然…。基礎をおろそかにしてたなと思った次第で…。
#include <stdio.h>#include <math.h>main(){int a,b,c ;scanf("%d",&a);scanf("%d",&b);scanf("%d",&c );printf("a = %d",a);printf("b = %d",b);printf("c = %d",c);}
出力しようとしたら、「"」が邪魔だった。そこでprinc prin1 print を使おうと思ったら区別がついてなかった。下の実行結果はEmacsの*scratch*で「C+j」した場合の出力結果。(Common LispじゃなくてEmacs Lispです)
(progn (print "hello, world") (format "]"))formatがちゃんと出力してくれないのが不思議。 その不思議な状況は、defunの中で、format関数の出力をした場合に出力してくれないという状況だった。
"hello, world" ; 改行してから出力して空白が最後に付く
"]"
(progn (prin1 "hello, world") (format "]"))
"hello, world""]" ; 改行しないし最後に空白も付かない
(progn (princ "hello, world") (format "]"))
hello, world"]" ; " で括られていない
成功したコード
(defun output0320 ()(let (a b c)(setf a (read)) ;値の入力(setf b (read))(setf c (read))(princ "a = ") ;値の出力(princ a)(newline)(princ "b = ")(princ b)(newline)(princ "c = ")(princ c)(newline)))
(newline)))一番右の括弧の外側でC+jを押す。
実行結果;
(output0320) ;ここでC+ja = 1b = 2c = 3
失敗したソースコード。これだと変数cしか出力できない。
(defun output0320-2 ()(let (a b c)(setf a (read))(setf b (read))(setf c (read))(format "a = %d" a)(format "b = %d" b)(format "c = %d" c)))
実行結果;
(output0320-2)"c = 3"
*****************************
追記11/04/12
書くのを忘れてたけどこれはEmacs Lispでやっているかつ、*scratch*でやっていたから、formatだけではうまく表示されなかったんだと思う。
ここを見るとoutput0320-2でやり方でできた。
(defun output0412 ()(let (a b c)(setf a (read))(setf b (read))(setf c (read))(insert (format "a = %d\n" a))(insert (format "b = %d\n" b))(insert (format "c = %d\n" c))))
実行結果
(output0420)
(ミニバッファ中で1,2,3を入力すると)
a = 1
b = 2
c = 3
nil
参考サイト