• ベストアンサー

Lispについて

最近プログラミングについて学ぼうと思っていろいろ調べてるのですが、その中でLispというものを見つけました。 関数型プログラミング言語であることや人工知能の開発に使われているということは分かったのですが、他にどのようなことができるのでしょうか? C言語に代わってソフトウェアの開発などもできるのでしょうか? (C++を学校で学び始めたばかりでまだ何もできないのですが…)

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

  • ベストアンサー
回答No.5

>最近プログラミングについて学ぼうと思っていろいろ調べてるのですが、その中でLispというものを見つけました。 おお、素晴らしい検索能力ですね(笑)。 >関数型プログラミング言語であることや人工知能の開発に使われているということは分かったのですが、他にどのようなことができるのでしょうか? まあ、極端な事を言うと、「何でも出来ます」よ(笑)。 もっとも、汎用プログラミング言語ですと、全部そう答えられるでしょうがね。 >C言語に代わってソフトウェアの開発などもできるのでしょうか? できますね。人によっては「作りやすい」って言う人も多いです。 ただ、長らくWindowsではCの天下だったんで、まあそれで商用ソフトウェアの数が少ない、と。歴史的な影響ですね。 (原則、Lispは昔はハイパワーの計算機上でしか動かなかった、と言う限界があったんですが、現代ではPCでも楽々動いてくれます) ええと、お薦めの処理系ですが、これが難しい。一般にLisp、と言っても色々な方言があります。 他の人も書かれていますが、例えばEmacsで動くEmacs Lispや、Schemeと言う方言。また、Javaで書かれて最近登場したClozureと言う方言も人気が出てきてるので「どのLispなのか?」と言うのが結構重要なんです。他にも中学生のプログラマが一生懸命作ってるT216(tizp)とか言うのもあって、「百花繚乱」なんです(笑)。MicrosoftのCとCodeGearのCの差、なんて目じゃない程なんです。それらはどっちにしても「C言語」ですが、Lispの場合、本当に「方言だらけ」なのです。世界は実はLisp系言語に溢れています(笑)。 (これが意味するのは、ある程度プログラムを覚えると「Lisp系言語をデザインしたくなる」人が意外と多い、と言う事を表しています) そんな中で、ある意味「業界標準」のANSI Common Lispを取り上げる方針とします。 まずは処理系。 多分今だと、WindowsだとCLISP CLISP: http://clisp.cons.org/ が人気あるでしょうね。UNIX界隈だったら SBCL: http://www.sbcl.org/ ってのが人気があります。 いずれにせよ、単独のインタプリタ/コンパイラを手に入れても何をどうして良いやら分からないでしょうから、Lispboxと言う「オールインワン」の環境を推薦しておきましょう。 Lispbox: http://www.gigamonkeys.com/lispbox/ これはCommon Lisp処理系とEmacsとSLIMEと呼ばれる「Lispプログラム開発ツール」を全部ワンパッケージに納めたものです。最初はとっつきにくく思うかもしれませんが、一旦慣れてきたら「他の環境に移るのが」辛くなるほど、です。極めて強力な「パッケージ」ですね。 対応OSもWindows、Linux、Macと揃ってるんで、扱いやすいと思います。かつ、これでEmacsの基本操作も学べると思います。 テキストとしては、現時点では次の本が多分一番良いのではないでしょうか。 実践Common Lisp: http://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=978-4-274-06721-1 割に大手の本屋だと置いてると思うんで、手に取って確認してみて下さい。 これが難しい、と思うのでしたら、サイエンス社の これがLispだ! http://www.saiensu.co.jp/?page=book_details&ISBN=ISBN978-4-7819-0537-2&YEAR=1989 辺りが入手が比較的簡単なんで、手頃だと思います。 こんな感じでしょうかね? Welcome to the World of Lisp!

nomalphard
質問者

お礼

Lispについてよくわかりました。 Lispとはそんなにたくさんあるものなんですね…。 開発ツールや書籍も紹介していただき本当に親切にありがとうございますm(_ _)m とても助かりました。 Lispの世界を楽しみたいと思います(笑)

その他の回答 (4)

  • masa6272
  • ベストアンサー率66% (93/140)
回答No.4

おっと。 かなりの誤解があるみたいです。 今、お勧めするとしたら、GCL(GNU Common Lisp)という処理系です。 これは、KCL(Kyoto Common Lisp)を基にしています。 コンパイラあります。 Windows用のバイナリーコードも作成できます。 日本語使えます。 関数名も日本語で付けられます。 Common Lispで、かなり手続き的な記述も出来るようになりましたが、基本的には関数型言語と呼ばれる言語です。 プログラムはλ計算という考え方を基にしています。 Common Lispなら、他の言語で書けるようなアプリケーションを書くことは出来ますが、手続き的な部分が主となるプログラムでしたら、Lispなんて使わないことをお勧めします。 emacs LISPはかなり特殊な処理系です。 特に変数のスコープなどが他の一般のアプリケーションを書くためのLispとは異なります。 はっきり言って、emacsのカスタマイズ専用だと思ってください。

nomalphard
質問者

お礼

コンパイラがあって日本語も使えるというのは便利そうですね。調べてみたいと思います。 アプリケーションを作るとしたら手続き型と関数言語型を使うかで違うものなんですね。使い分けたいと思います。 Emacsの特徴も教えていただきありがとうございました。

  • eroermine
  • ベストアンサー率18% (83/444)
回答No.3

インタープリターです。 古くはBASIC、今ではperl,ruby,phthonの仲間。 だからWeb/CGIにも使えます。 perlなんかと比べると大規模なシステムもOK しかし、有名な処理系はほとんど日本語不可です。 なんと、コメントに漢字コード入れるのも不可なのが多い。 C言語の代わりにはなりません。 C と対極の言語。 面白いですよ。 とりあえず テキストエディタを Emacs 系に変えてみてください。 Windowsだと Meadow がお勧め。 これのマクロ? が Lispです。 これを使いこなせるとかなりはったりが利きます。 少なくとも国立大の情報系大学院生程度には見える。

nomalphard
質問者

お礼

Web/CGIにも使えるというのは初めて知りました。 「面白い」というのを聞いて興味が増しました。 頑張ってみたいと思います。 それとはったりが利くとはおもしろいですね(笑) 情報ありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

Lisp は記号を処理する機能が (もとから) 備わっているので, 「記号を処理するプログラム」は C より書きやすいです. それと「人工知能」の観点から, 昔から「数式処理」でしばしば用いられています. 例えば, Maxima は (実質的に) Lisp の処理系の上で動いています. なお, 本来の意味からすると Lisp を「関数型言語」とするのは間違っています. 端的に言うと, C を「関数型言語」とするのとほとんど同じように間違いといっていいでしょう.

nomalphard
質問者

お礼

Lispの特徴がわかりました。 関数型言語では無いのですか…。 そう書かれているサイトをいくつも見つけたのでそうかと思っていましたが違うのですね。 回答ありがとうございました。

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

向き不向きを別にすれば、どんなプログラミング言語でもどんなことでも出来ます。 Cと比べると、LISPは抽象的に設計されたが、Cはコンピュータの仕組みを元に設計されたので、 ・Cの方がコンピュータと相性が良く、高速なプログラムが書きやすい ・LISPの方がコンピュータの仕組みの制約が無く自由に考えられる という性格の違いがあります。 「画面に画像を表示する」とか「ネットワークで通信を行う」とかいうようなコンピュータの制御をどんな事が出来るかは言語というよりは、ライブラリの機能です。言語+ライブラリ(+開発ツール)を「処理系」といい、処理系により出来ることは違います。 例えば、「C言語にネットワーク通信の機能は含まれていますか?」の答えは「ノー」ですが、Visual C++ とか Linux上のgcc+glibとかの処理系にはネットワーク通信機能が含まれています。 Emacsというエディタにはemacs-lispというlispの一方言の処理系が組み込まれていますが、これには色々組み込まれています。emacs-lispで書かれた五目並べやテトリスゲーム、メールソフト等も内蔵されています。

nomalphard
質問者

お礼

なるほど…。 ライブラリで決まるのですか。 CとLispの違いも簡潔でわかりやすく教えていただきありがとうございました。