• ベストアンサー

LISPでforeach

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

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10262)
回答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

  • LISPではperlのforeachをどのように書くのでしょうか?

    LISPでの以下の配列の配列、(LISPでは何て呼ぶのかな?)の ひとつひとつの要素を表示させたいです。 (setq dat'( ( 1 2 3 4 5) ( 6 7 8 9 10) (11 12 13 14 15) ) ) LISPではperlのforeachをどのように書くのでしょうか? # Perlの場合 foreach(@pos){ foreach($_){ print "$_\n"; } } また、配列のサイズ今回の場合は1次元配列では3,2次元配列ではサイズが5ですが、LISPで配列のサイズを求める方法も知りたいです。

  • LISPで連想配列の操作?

    (setq ary '((A . 1) (B . 2) (C . 3))) で、perlでの $ary{'A'}++; や $ary{'B'}='X' や $ary{'C'}=$ary{'A'}+5; ということをさせたいのですが、LISPではどう書くのでしょうか? (assoc 'A ary) 2 (assoc 'B ary) X (assoc 'C ary) 7 という結果が欲しいです。 また、一度にaryの内容を表示させる Data::DumperのようなものはLISPにあるのでしょうか? 処理系はCommon LISPです。

  • LISPでperlのようなデータ構造は可能でしょうか?

    LISPでperlのようなデータ構造は可能でしょうか? @dat = (); $dat[0]{'abc'} = 'ABC'; $dat[1]{'def'} = 'DEF';

  • LISPを今から覚えたい

    最近Lispを覚えようとパソコンで動作するLISPを探しているのですが、CommonLispに対応する学習に最適なフリーのインタープリタが見つかりませんでした。手に入れることは可能でしょうか? まずはじめにやりたいことは、数値と文字(Hellow world)を関数?に渡して、数値分文字を表示させるものが作りたいのですが、 そのようなサンプルがかける方、教えてください。 LISPを覚えるにはたくさんの関数?を覚えると習得が早いでしょうか? それとも、考え方を先に身につけた方が早いでしょうか?

  • foreach について

    foreach (0..$abc) 書くところを間違って foreach (0.. $abc) と$abcの前に半角の空白を書いて サ-バ-に送ってしまいました、 正しく画面が表示されるサ-バ-と エラ-になるサ-バ-があります、 まぜですか。

    • ベストアンサー
    • Perl
  • Emacs-Lispモードで、式が返す値を全て表示

    こんにちは。 Emacsは、Gnu Emacs for Windows 23.4 を使っています。 Emacs-Lispモードで、バッファに記述されている式を評価した時、その式が返す値が、ミニバッファに出力されます。 ところが、式が返す値が長すぎると、途中までしか表示されません。 例えば自分の環境だと、 (symbol-value 'load-path) という式を評価すると、ミニバッファには (nil "~" "~/My_Lisp_Programs" "c:/Emacs_for_Windows/emacs-23.4" "C:/Emacs_for_Windows/emacs-23.4/site-lisp" "C:/Emacs_for_Windows/emacs-23.4/../site-lisp" "C:/Emacs_for_Windows/emacs-23.4/lisp" "c:/Emacs_for_Windows/emacs-23.4/lisp/url" "c:/Emacs_for_Windows/emacs-23.4/lisp/textmodes" "c:/Emacs_for_Windows/emacs-23.4/lisp/progmodes" "c:/Emacs_for_Windows/emacs-23.4/lisp/play" "c:/Emacs_for_Windows/emacs-23.4/lisp/org" ...) という文字列が出力され、...以降が表示されません。 どうすれば、Emacs-Lispモードで、式が返す値を全て表示する事ができるのでしょうか? 何か御存じの方がいらっしゃれば、是非、情報を提供して頂きたく思います。 では、よろしくお願い致します。

  • foreach内での$_の書き換え

    数年前にハッシュのデータをforeachで取り出す時、$_をいじると、$_はハッシュのデータと直接つながっているので、ハッシュのデータ(keyは変わらずvalueのほう)が書き換わってしまうと聞き、実際にやってみて書き換わってしまった覚えがあります。 %hash = ("red" => "aka", "green" => "midori", "blue" => "ao", "black" => "kuro"); foreach (%hash){ print "$_<br>\n"; $_ = "modify"; } print "<hr>\n"; foreach (values %hash ){ print "$_<br>\n"; } ↓↓↓↓↓↓html↓↓↓↓↓↓↓ blue ao green midori red aka black kuro ------------------------------------ modify modify modify modify ↑となったはず 先日それを試してみたら書き換わりませんでした。 以前は確かに書き換わった覚えがあります。 perlの仕様が変わったのでしょうか。それとも私が何か間違っているのでしょうか。 詳しい方にお教えいただければと質問しました。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • foreachの中で使われている\の意味

    ●質問の主旨 下記のforeach文の中で使われている"\"は、 どういう意味で使われているのでしょうか? ご存知の方、ご教示よろしくお願いします。 ●コード(index.phpの一部) <tr> <td>書籍の満足度は?</td> <td> <?php // 配列からラジオボタンを作成する $ar_rate = array( "5"=>"満足", "4"=>"やや満足", "3"=>"普通", "2"=>"やや不満", "1"=>"不満", ); foreach ($ar_rate as $key=>$value) { echo "<input type=\"radio\" name=\"rate1\" value=\"{$key}\">{$value}"; } ?> </td> </tr> <tr> <td>書籍のボリュームは?</td> <td> <?php // 配列からラジオボタンを作成する foreach ($ar_rate as $key=>$value) { echo "<input type=\"radio\" name=\"rate2\" value=\"{$key}\">{$value}"; } ?> </td> </tr> ●参考文献 西沢直木 PHPプログラミングの教科書P175

    • ベストアンサー
    • PHP
  • foreachについて

    phpを今勉強中なのですがforeachで少し分からない部分があります。 例えば(1)はnのある配列を消去するだけのプログラムでして、これを (2)のように書き換えてみると、全て表示されてしまい、(1)と同じ動きをしません。 phpマニュアルを読む限り同じ動きをすると思うのですが、array_keys($key1)の中に うまく一時配列のキーが入っていないように思います。 どうしてでしょうか? (1) <?php $food["y"]["bb"]= "k1"; $food["n"]["bb"]= "k2"; $food["n"]["cc"]= "k3"; $food["k"]["dd"]= "k4"; foreach($food as $key=>$key1){ foreach($key1 as $key2=>$key3){ if($key=="n") unset($food[$key][$key2]); } } echo "<pre>"; print_r($food); echo "</pre>"; ?> (2) <?php $food["y"]["bb"]= "k1"; $food["n"]["bb"]= "k2"; $food["n"]["cc"]= "k3"; $food["k"]["dd"]= "k4"; foreach($food as $key=>$key1){ foreach($key1 as $key2=>$key3){ if(in_array("n",array_keys($key1))) unset($food[$key][$key2]); } } echo "<pre>"; print_r($food); echo "</pre>"; ?>

    • ベストアンサー
    • PHP
  • smartyのforeachの使い方

    仮に$strが以下のような配列を持っている場合smartyのtpl側で 出力させたいのですがうまくいきません。 Array ( [0] => Array ( [id] => 1 [name] => 名前 [sub_id] => Array ( [0] => 12 [1] => 13 ) [sub_name] => Array ( [0] => あああ [1] => いいい ) [sub_cnt] => Array ( [0] => 5 [1] => 5 ) ) [1] => Array ( [id] => 1 [name] => 名前 ) ) sub_***は配列が存在するものとしないものがあります。 そしてtpl側は {foreach item=items from=$str} <ul id="side{$items.id}"> {foreach item=item from=$items} <li><a href="index.php?id={$item.sub_id}">{$item.sub_name} ({$item.sub_cnt})</a></li> {/foreach} </ul> {/foreach} とforeachを重ねてみたのですがsub_***の値が表示されない 状態です。 複雑な配列なのですがこの場合どうすればうまく表示させれるの でしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう