ほとんどのソフトはJavaやCなので書かれていると思いますが、SchemeやPrologを使うべきである時はありますか?Schemeの場合とPrologの場合両方教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

その前に。



>ほとんどのソフトはJavaやCなので書かれている

そうでしょうね。
ただし、「ほとんどのソフトが書かれている」と言うのと、「JavaやCを使うべき」と言うのは全く関係がないですよ。従って、後半の質問は殆ど無意味です。

>ほとんどの人は中国語を喋るのに

地球上の人口比率ではそうですね。

>日本語を使うべきである時はありますか?

分かりますか?こんな質問はナンセンス極まりない、です。

単に自分が使いたい時に使えば良い、ってのが結論です。特にプログラミング言語は「コンピュータが理解する」ものなんで、「コンピューターは、何であろうとプログラマが選んだ言語を話すんじゃないか」。
(ポール・グレアム)

普通のやつらの上を行け:
http://practical-scheme.net/trans/beating-the-av …

とまあ、「いつ使うか」と言うより、単に実例挙げた方が早いでしょう。
Prologの方は、残念ながら良く知りませんが、Schemeなら実例があります。
日本で有名なScheme実装にGauche

Gauche:
http://practical-scheme.net/gauche/index-j.html

と言う実装があって、これはWebフレームワークであるKahuaの土台になっています。

Kahua:
http://www.kahua.org/show/doc/Tutorial

Webフレームワークって事はSchemeで書かれたWebページってのが存在してる、って事です。
例えば次の商用のWebページなんかがそうですね。

HOPプロジェクト:
http://www.timedia.co.jp/products/hop/

この場合、Schemeの適用範囲は、Gaucheと言う実装で言えば、Perl/Ruby辺りと似たような適用範囲だ、って事です。
(聞いた話では、実はオーム社のWebページもある程度Gaucheが使われているらしいんですが、真偽の程は未確認です)

他に、Photoshopの代替で、最近人気の、PC-UNIX生まれのグラフィックソフト、GIMPと言うものがあります。

GIMP:
http://www.gimp.org/

これのスクリプト言語(のうちの一つ)はSchemeです。ここではSchemeは、Microsoft Officeで言うVBA代わりである、って意味ですね。

他にはJavaで書かれたSchemeなんてのも存在してて、逆に言うとJavaのシチメンド臭い静的型付けの「儀式」抜きにして、Javaのライブラリを流用しまくり、なんてSchemeも存在します。有名どころではKawaと言う実装があります。

Kawa:
http://www.gnu.org/software/kawa/

何でこんなのが存在してるかと言うと、

「Javaのライブラリは魅力的。でもJava"自体で"唸りながらプログラムを書くなんてのはシチメンド臭くて嫌だ。」

って思ってるハッカーがいるからに他なりません。レイヤーの一段上で遊びたい人が確実にいる、からこう言う実装が存在するのです。

あとは、これでも読んでおいて下さい。

バベル案内:
http://www.aoky.net/articles/steve_yegge/tour_de …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qprologでのプログラミング

現在prologを利用して、翻訳ソフトを作成しています。

DCGを扱っているのですが、途中で躓いてしまい、参考になるホームページなどを探しているのですが、なかなか見つかりません。

prologでの簡易翻訳に関して記載されているホームページや書籍などありましたら、ご教示ください。

宜しくお願いします。

Aベストアンサー

直接飜訳の手法を論じたものではないのですが,自然言語の構文解析
については,
『人工知能用言語シリーズ/1 Prolog』(新田克己・佐藤泰介著,昭晃堂,
1986年)
の第9章「構文解析」(p.139~163)に記述があります.

QC,C++,VB,Java 各言語の特徴って何ですか?

C,C++,VB,Java これらの各言語の特徴や開発にあたって注意しないといけない点などを教えてください。

■背景
現行のシステムには様々な開発言語が用いられていますが、時々なぜこのシステムを開発するのにこの言語を使ったんだろう?と思うことってありませんか?
私は試行錯誤すればどの言語でも大抵のことはできると思っているせいか、いまいち言語の特徴が明確にできません。
上記の言語を比較してそれぞれどのようなことが言語の特徴となるのでしょうか?
よろしくお願いいたします。

Aベストアンサー

C言語……元々UNIXを開発する為に作られた。OS開発言語。俗に「高級アセンブリ」等と呼ばれる。開発当時のレベルでは「プラットフォーム間の差異を吸収する」移植性の高い言語だった。
これは元々UNIX自体が特定の「動作可能/保証するプラットフォームを持たなかった」為である。「移植性の高いOS」を作るための「移植性の高い言語」が開発目的の一つだった。
Algol等の「構造型プログラミング」の考え方を基盤としている。そして元々日常ユースは想定されていないし、「大きくて複雑なプログラム」を書く為のモノでもなかった。
UNIXの開発思想は「一つの目的の為の小さなプログラム」の集合体だった筈だが別のプラットフォームで大きくて複雑なプログラムを書く事に使われ初め当初の使用目的と大きく乖離していった。一つの背景に、貧弱なマシンでスピードを稼ぐには「C言語しか選択肢が無い」と言う状況が続いた為と思われる。
なお、C言語のコンパイラの最適化は他の言語を上回るケースが多く、現在ではOSの他に、Lisp、Perl、Python、Ruby等の「言語を書く為の言語」として使われるケースが多い。元々、プログラミング言語はアセンブリ言語で組み立てられるケースが多かったが、現時点その分野も前述の特徴の為、C言語に置き換わってる。

C++…基本的にはC言語にSimulaと言う言語の特徴を付け加えたモノ。最初はObjective CとかC with Classes等と呼ばれた。ただし、ここで言う「オブジェクト指向」は元々オブジェクト指向、と名乗ったSmalltalkの概念とは(被る分もあるものの)大幅に異なる。

Squeak(Smalltalk):
http://squeakland.jp/

また、厳密には「オブジェクト指向」を表す定義も存在しない。ただし、C++がポピュラーになるにつれて「C++型の」オブジェクト指向が受け入れられた。
C++は必ずしも「より良いC」は意味しない。元々のデザイナーであるStroustrupによる冗談も存在する。

http://hp.vector.co.jp/authors/VA000092/jokes/strup.html

VB……本家BASICとはかなりかけ離れたMicrosoftのプロプリエタリ言語。ただし、「Windowsで動くソフトを作る」分には最強の能力を発揮する、と思われる。また、BASICとしては最高、との評もある。
「VBのオブジェクト指向は本格的ではない」等と言った批判もあるが、前述のように元々「オブジェクト指向」自体の定義が曖昧な為、割に見当違いの批判だと思われる。
ただし、C言語やC++みたいに移植性は念頭に置いてない。また、本家BASICともコードの互換性はほぼ無い。

Java……一言で言うと改良版C++。開発者のジェームス・ゴスリングもそう述べている。提供元はSun Microsystems。
あまりに低レベル(アセンブリに近い)なC言語特有の操作(具体的にはポインタ)を止め、メモリ管理をガベージ・コレクション(ゴミ集め)に任せてる。これでプログラマがメモリ管理に頭を悩ます事が無くなった。
また、登場した70年代と違い、C言語の「移植性の利点」が薄れてきた事もあり、もう一段階上のレベルでの移植性を達成するように作られている。かいつまんで言うと、OS上の「Java仮想マシン」で動く言語、と言う構図になっている。言い換えると「コンピュータ上で動くコンピュータ」で動くアプリケーションが作れる、と言うのが特徴。プラットフォームの差はその「仮想マシン」で吸収される。
従って、CやC++等と違い、Javaのソースはネイティブコードにはコンパイルされないで仮想マシン上で動く中間コードへとコンパイルされる。
移植性はピカイチだが、反面、Java製のアプリは「コンピュータ上で動くコンピュータ」上で動く為、スピードの面で言うとCやC++で作成されたアプリに劣る、と言う欠点も持ち合わせている(ただし、色々なエミュレータなんかを見ても分かるように、近年はハードウェアの進歩により、そこまでスピードは問題では無くなって来た)。

C言語……元々UNIXを開発する為に作られた。OS開発言語。俗に「高級アセンブリ」等と呼ばれる。開発当時のレベルでは「プラットフォーム間の差異を吸収する」移植性の高い言語だった。
これは元々UNIX自体が特定の「動作可能/保証するプラットフォームを持たなかった」為である。「移植性の高いOS」を作るための「移植性の高い言語」が開発目的の一つだった。
Algol等の「構造型プログラミング」の考え方を基盤としている。そして元々日常ユースは想定されていないし、「大きくて複雑なプログラム」を書く為のモノ...続きを読む

QVBA(マクロ)を勉強したい

VBAを勉強したいのですが、オススメの本等教えて下さい。
今FOM出版のマクロ入門を買って勉強しています。大体の基本操作は分かった気がします。

Aベストアンサー

こんにちは。

ここら辺が参考になると思います。

日本VBA協会の参考書籍
の準拠本
http://www.vbaa.jp/training/books.htm

アマゾンのExcelVBA
http://www.amazon.co.jp/exec/obidos/ASIN/4774119660/vbaajpn-22/249-7235447-7367506

Q現在のC/C++とjavaの長所短所について

最近プログラミングをかじり始めた初心者です。
C/C++とjavaの本当に基礎的な部分だけ学んだのですが、まだ大規模なプログラムなどを組んだ経験がなく、それぞれの長所短所というものがいまいち分かりません。
自分で感じたりネットで調べた限りでは
・javaはOSなどに左右されず動くことが最大の利点
・コンパイル方式の関係でC/C++の方が動作が速い
・組み込み系では細かく管理できコンパクトに収められるC言語が有利
くらいなのですが、これ以外に大きな違いなどはあるでしょうか?
それと「昔はjavaが遅いと言われていたが、最近ではそれほどでもなくゲーム開発でも使われ始めた」というようなことも聞いたのですが、そのように昔言われていたが今では違うというようなことはあるでしょうか?
ご回答よろしくお願いします。

Aベストアンサー

大体間違ってないんじゃないですかねぇ。

基本的には、

・C++/Javaはオブジェクト指向言語
・Cは手続き型言語

と言うパラダイムの違いはあります。
Java自体はBetter C++となる、と言う目的の為に作られました。
そしてC++はCの上位互換を目指してデザインされました(ただし、今は言語仕様上必ずしもそうはなっていません)。

> ・javaはOSなどに左右されず動くことが最大の利点

はい、一般的にはそう言われています。
ただ、Javaと言う言語仕様と実装、ってのは別次元の話で、これは実装の話、しかもOracleと言うJavaの権利を握っている会社が提供してる「公式の」Javaの話ですね。
実はJavaの言語仕様に則ったOracle以外の別の実装もあることはあって、「Javaと言う言語(仕様では)」って事でもないんです。
「公式の」Javaの場合、コンパイルして吐き出すコード、「ネイティヴ」と呼びますが、要するにコンピュータ自体が直接解釈実行するマシン語ではないんです。
対象はJava仮想マシン(Java Virtual Machine = JVM)と言うソフトウェアなのです。
つまり、「公式の」Javaの場合、その仮想マシンがプラットフォーム別(例えばWindows、MacOS、Linux等)に用意されてて、そこは変えないといけないわけですが、その上で走る「Javaのコードは共通である」って言う設計をしてるんですね。
つまり、マシンの差は「仮想マシンが吸収する」と言うやり方なんです。
ただ、例えば互換のgcj(GNU Compiler for Java)なんかはネイティヴ・コードを吐き出したりも出来ます。
(ただ、最新のJava8にはまだ追っついてないとは思います)

GCJ:
https://gcc.gnu.org/java/

OpenJDK:
http://openjdk.java.net

> コンパイル方式の関係でC/C++の方が動作が速い

これも大体その通りだと思います。
C/C++とJavaの差は、Javaは仮想マシン前提の設計ですが、「一般的には」C/C++は直接マシン語(と言うか実際はアセンブリ言語)を吐き出します。要するに、(公式のJavaと比べた場合、)コンピュータ全体の作業が一段階少ないわけですね。
ただ、実の事を言うと、言語仕様上はC/C++は「コンパイラです」とは指定されてません。
で、探せばC/C++のインタプリタなんかもあるんで、必ずしもC/C++が「確実に速い」とも言えないんです(一般的にはインタプリタはコンパイラより遅い、と言われてます)。

例: Cling(C++インタプリタ):
https://root.cern.ch/cling

> 組み込み系では細かく管理できコンパクトに収められるC言語が有利

これもその通りだと思います。

> そのように昔言われていたが今では違うというようなことはあるでしょうか?

あります。
CPUも速くなってますし、メモリもJavaが登場した90年代のコンピュータより多く積んでますし、あとはJVM、つまり先ほど書いた仮想マシンですよね、その実装も良くなってるでしょう。

・1995年の一般的なコンピュータのメモリ:32Mb〜64Mb -> 2016年の一般的なコンピュータのメモリ:Gbレベル(最低でも32倍以上)
・1995年の一般的なコンピュータのCPUの周波数: 66MHz辺りから -> 2016年の一般的なコンピュータのCPUの周波数: 1GHz突破〜2GHz以上(最低でも15倍以上)

つまり今は、別にJavaに限らないですが、昔のコンピュータの「リソースがとにかくすぐ足りなくなる」と言うような状況と違って

「何が何でも速度を稼ぐ為にC/C++を使わなければいけない」

と言うようなクリティカルな状況はそうそうなくなってきました。
本当に速度が必要な、って状況じゃなければ、組み込みでもない限り、そんなにC/C++を使わなくちゃいけない、と言うような必然性は薄れては来てると思います。

大体間違ってないんじゃないですかねぇ。

基本的には、

・C++/Javaはオブジェクト指向言語
・Cは手続き型言語

と言うパラダイムの違いはあります。
Java自体はBetter C++となる、と言う目的の為に作られました。
そしてC++はCの上位互換を目指してデザインされました(ただし、今は言語仕様上必ずしもそうはなっていません)。

> ・javaはOSなどに左右されず動くことが最大の利点

はい、一般的にはそう言われています。
ただ、Javaと言う言語仕様と実装、ってのは別次元の話で、これは実装の話、しかもOracleと...続きを読む

Qエクセル マクロコードの記述の勉強

独学でエクセルでのマクロのコード記述ができるようになりたいのですが、コードがかける人はどのようにしてかけるようになったのでしょうか?

プログラミング関係にはまったくの初心者なので、入門本を立ち読み程度読んでみたのですが、「面白そうだが、かなり手強そう」というような印象でした。

現実的な問題として、実際にコードをかける人は、プログラミング関係の学校等で学んだ人ぐらいしかいないのでしょうか?

めざすレベルはエクセルでこうしたいと考えたものを調べながらコードをかける程度のレベルです。

Aベストアンサー

> 実際にコードをかける人は、プログラミング関係の
> 学校等で学んだ人ぐらいしかいないのでしょうか?

そんな事ないです。私も独学で覚えましたから。

エクセルはマクロ記録がありますので、実際の操作を記録して書かれたコードを追っていったり、書き直したり出来ます。
VisualBasicEditor画面でコードにカーソルを置き、F1キーを押すとVBAヘルプ(たしか標準ではインストールされないので追加インストールの必要がある)が開くので、意味を調べたり、サンプルコードを見たりして覚えて行きました。
ネットにも沢山サンプルがありますし。

変数の使い方とforやif等を覚えてマクロ記録を直すだけでも結構便利になります。

QVB, C/C++, JAVAのどれかを選ぶとしたら

プログラムを学ぶための大学の社会人講座へ行こうと思っていますが、「アプリケーションプログラミング」のコースはVISURAL BASIC,C/C++,JAVAの三つに分かれています。どれが良いと思いますか?
目的は自営業のため、商品や情報など様々のものをデータベース化し、ウェブ上で取引先と共有し使いたいと思っています。(というか、アイデアも漠然としているので、実際にプログラミングを覚えて何ができるか知りたいというのがあります)
私自身はアクセスで簡単なデータベースを作ったり、遊びで簡単なCGIを書いて動かしてみたことがある程度です。よろしくお願いします。

Aベストアンサー

ちょっと補足させてください。

>やはりC/C++やJAVAは素人には難しすぎますか?
そういう風には思いません。
言語そのものの難易度は VB < Java < C < C++ になると思います。

ただ、このなかでVBだけがIDE SUITというか開発環境なのに対し、
そのほかは、裸の言語だという点で前回の回答をしました。

(Microsoftの)ASPなどもふくめたVBやVBAの環境は、
アクセスをお使いの経験がおありになる事を考えても、もっとも
ゴールに近い選択だと思います。

Javaは基本的なAPI(システムとやり取りするための機能)を
含んだセット(SDK)で完結するのでは?という方もいらっしゃる
かも知れませんが、Webアプリを考えるならJ2EEが必須だと思います。
どの程度の期間の講座なのかわかりませんが、普通に考えてこれは
入ってこないと思います。
ただ、新しい言語だけあって、体系が洗練されているので、
取っ掛かりとしては最適だと思います。
(SDKとはJavaの基本セットで、sunのページでや雑誌の付録など無料
で配られています。J2EEとはEJBやJSP、ServletなどJavaベースの
アプリケーションサーバー構築に必要なものを含んだJavaの拡張部分で
無料のものもあるようですが、WebLogicなどの製品もあります)

もちろんVBにもそういった部分がありますが、Windows環境と
割り切る事(それしか出来ませんが)と単一の製品だということが
最大の強みだと思います。

処理系(OSとか)依存しない標準化のあるJavaと比べ、C/C++には
そういった部分で、知識の習得や情報収集などかなり段階を踏まねば
なりません。(時間や期間がかかるという意味で)
CGIを書くにしてもシステムの違い(例えばWindowsか、Linuxか)
を意識する必要があり、必要な知識の幅も膨大になってしまいます。
ただ、(つきなみですが)なんでも出来るという部分も否めませんし、
これが最大の強みでもあります。

このような感じで、もし時間が許すのであれば、すべてを
経験されるのも悪くはないと思います。

再度評価するとしたら
VB:やりたいことが1パッケージになっている。
Java:言語体系が洗練されていて学習にも適している。
C/C++:おおよそ全ての環境に適応でき、なんでも出来る。

まとめとして、それぞれの言語によって習得にかかる
時間と到達点が異なります。Webベースのアプリということで、
まずVB(+ASP)が、やはりおすすめです。
ただし、JavaやC/C++が使いたい局面は出てくると思いますし、
タイミングを見計らい、順に習得する方向を持つということで、
いかがでしょうか?

ちょっとまとまりが悪く変な回答になってしまい申し訳ありません。
ただ、どんなプログラマでも最初は素人なわけですので、
無理ということは絶対にないと思います。がんばってください。

ちょっと補足させてください。

>やはりC/C++やJAVAは素人には難しすぎますか?
そういう風には思いません。
言語そのものの難易度は VB < Java < C < C++ になると思います。

ただ、このなかでVBだけがIDE SUITというか開発環境なのに対し、
そのほかは、裸の言語だという点で前回の回答をしました。

(Microsoftの)ASPなどもふくめたVBやVBAの環境は、
アクセスをお使いの経験がおありになる事を考えても、もっとも
ゴールに近い選択だと思います。

Javaは基本的なAPI(システムとやり取りす...続きを読む

Qエクセルのマクロを強制終了させるには

ブック内の全てのシートが順次印刷される設定のマクロがあります。
これを途中で強制終了させる方法を知りたいのですが。
仮にシートが5つの場合、最初のシートの印刷中に全ての印刷を停止したいと思った場合、現在は、印刷ダイアログボックスの印刷中止ボタンを5回押すことが必要です。
一回の停止処理で全てを停止させるにはどうしたらいいでしょうか?

Aベストアンサー

印刷中止ボタンが1回で全ての印刷が中止になるようにマクロを組み直す。

Ctrl+Breakボタン押下→終了。

PC電源強制押下!

QC ASP JAVA .NET C# の組める技術者って「VC++4.0」も組めるものなのでしょうか?

C
ASP
JAVA
.NET
C#
を組める技術者って
(1)「VC++4.0」も組めるものなのでしょうか?
(2)「VB」を組めるものなのでしょうか?
(3)「VB.NET」を組めるものなのでしょうか?
いずれも、仕事としてのProgramです。

Aベストアンサー

人によっては可能だと思いますが、VC++4.0の方が
古いので苦しい人もいるかも。逆ならまだしも。
新しいライブラリ等に慣れきった人ほど難しいかな。

VB、VB.net・・・プログラマーなら、新規からでも始められる言語だと認識しております。

Q小数点以下の値を四捨五入し,指定した桁数に変換するためのマクロの記述方法について。

BMI値を小数点以下1桁まで算出するマクロを作りたいのですが・・・


BMI値= 体重/(身長*身長)

↑BMI値自体はこの式で算出できるのですが、その数値を四捨五入し、小数点以下1桁まで算出する式が分かりません。。。
どうも「Application.WorksheetFunction.Round(小数値, 桁数)」を用いるようなんですが、どう応用したらよいのか・・・

上述の式に組込んで書くor別途書く必要があるのか教えて下さい。
模範式も提示してもらえると助かります。
それでは回答よろしくお願いします!

Aベストアンサー

ひとまずこんな感じでしょか?

'-------------------------------
Dim BMI As Variant
Dim Sintyo As Variant
Dim taizyu As Variant

taizyu = 129.3 '体重129.3kg
Sintyo = 1.293 '身長129.3cm。値はメートル

BMI = taizyu / (Sintyo * Sintyo)
BMI = Round(BMI, 1)
MsgBox BMI
'-------------------------------

上を参考に試行錯誤してみてください。Variant宣言は不要でしたな。
しっかしドOえもんふとってるなぁ

QC#という完璧な言語があるのにどうしてVBやC++、javaがいまだに使われている

MSが開発した言語であるC#は既存の言語の利点を集めて欠点をつぶしたものらしいのです。
古いものを補修するのに仕方なく古い言語を使うだけならまだなんとなく分かりますが新しいものを作るときに古い言語が使われる理由はなんですか。

Aベストアンサー

MSの言う「既存の言語の利点を集めて欠点をつぶした」に説得性が無いからでしょうか。


人気Q&Aランキング

おすすめ情報