• ベストアンサー

LISPでforeach

perlでいう、foreachはLISPでは何でしょうか? (1 3 5 7 9) を 1 3 5 7 9と表示させたいです。 perlからLISPに以降するのに参考になる書籍は洋書も含めてあるのでしょうか?

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4901/10362)
回答No.1

(setq a '(1 3 5 7 9)) として、それを空白区切りで出力するという意図だとして、 LISPらしく書くなら (mapcar '(lambda (x) (princ x) (princ " ")) a) でしょうか。変数やループを使ってLISPらしくなく書くと、 (let ((x a)) (while x (princ (car x)) (princ " ") (setq x (cdr x)) ) ) >perlからLISPに以降するのに参考になる書籍は洋書も含めてあるのでしょうか? 洋書は知りませんが、そういう目的に特化した書籍は無いでしょうね。 普通にLISPを勉強するしかないと思います。

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

つ dolist Common LISP Hints: Iteration http://www.n-a-n-o.com/lisp/cmucl-tutorials/LISP-tutorial-18.html PerlでLisp的なプログラミングをしようというのであれば Higher-Order Perl: Transforming Programs with Programs: Books: Mark Jason Dominus http://www.amazon.com/dp/1558607013 というのがありますが、逆方向は多分ありません。 というかプログラムの組み方の基本的な考え方が違うのですから、 Perlで作った××をするプログラム(それなりの大きさ)をLispで書いてみる というのならまだ意味もあるでしょうけれど、 Perlでこう組むロジックをLispでは…というミクロな追いかけ方はしないほうがよいでしょう #てのは前にも書きましたよね? 素直にLispの入門書を一から追いかけていくのが結局は早道になると思いますよ。 あと余計なことかもしれませんが、#1の回答にある mapcar は mapcにしたほうがよいのでは? あまり効率にこだわることもないでしょうけど。

関連するQ&A