レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。
ヒッキープログラミングスレ
-
プログラミングの話題のスレ
質問・相談
初心者からプロまで
プログラミングに関することなら何でもOK
-
warota
-
何をもってLispとするか
構文が同じならLispと呼べるのだろうか
関数やマクロや特別形式とやらが他のLisp方言とは全然異なっていてもLispになるのだろうか
Lispと呼ぶにはやはり他のLispと共通する名前と機能を持った関数やマクロや特別形式が必要なのか
-
C言語にも規格がありANSI準拠とかC99準拠とか基準があるが
それらに全く準拠してないC言語だって存在していたはず
その言語の種類を決めるポイントとは何なのか
-
仮に構文だとするとBASICと呼ばれる言語はみんなバラバラだ
N88-BASICもMSX-BASICもQuick BASICもF-BASICもVisual BasicもVisual Basic .NETも
全部BASICだが構文は違ったりする
-
rubyもlisp方言だしな
-
まぁ現代においては既存言語の実装作るなら何らかの規格に準拠させるのが普通なんだろうが
ANSIとか規格が決められる前までは何を根拠に○○言語だとか名乗っていたのだろうか
-
rubyがlispの方言か・・・どこら辺を影響受けたんだろうな
wikipediaに載ってるコードとかでは共通点を見いだせないが
使ってると似てる部分とか感じるのだろうか、それとも実装技術的に似てるのか
rubyが影響受けた言語としてlispの他にperlやpython、smalltalkにCLUとあるな
何か言語を作ろうと思うと既存の言語を色々と勉強していいとこ取りをするってのがベターなんだろうな
-
そういやWikipediaにはB言語とD言語はあるがA言語とかE言語もあったりするのだろうか
-
D言語は最新版のリリースが4日前か
-
A言語っていうかalgolじゃなかったっけ?
Eは冗談で作ってる人くらいはいそう
というか一晩デバッグしてもとれなかったからもう寝る
-
おやすみ
-
A+という言語がAPLという言語の派生とのこと
同じくAPLの派生でJという言語があるとのこと
-
日本語wikipediaには存在しないが
APLの派生にKとQもある
K (programming language) - Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/K_(programming_language)
Q (programming language from Kx Systems) - Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/Q_(programming_language_from_Kx_Systems)
-
List of programming languages - Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/List_of_programming_languages
A#とかあるのな
-
IT系は日本語Wikipediaが貧弱すぎる・・・アニメとか声優とかアイドルはやたら充実してるくせにな
-
プログラミング言語一覧 - Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E%E4%B8%80%E8%A6%A7
-
なでしこって日本語プログラミング言語だのに半角英数使うのか
日本語プログラミング言語なら全部全角でやれや
-
日本語の文法構造やタイプ量からしてプログラミング言語に向いてない
-
BASICで書くと
LINE (100, 100) - (120, 250), RED
LOCATE 5, 10: PRINT "HELLO WORLD!"
みたいなのが
日本語プログラミングとか作ると
座標(100,100)から座標(120,250)まで赤色の線を引く
5行目の10文字目に「HELLO WORLD!」を印字する
こんな感じになるのか?w
-
BASIC調で作ったとしても
直線 (100, 100) - (120, 250), 赤
カーソル位置 5, 10
印字 「HELLO WORLD!」
日本語でプログラミング言語作る意味を感じないな
そもそもIT用語で日本語化してないの多いしな、クラスとかオブジェクトとかインターフェースとかフィールドとか
-
日本語プログラミング言語を作ったとしてのメリットは
母国語が日本語の奴でプログラミング初心者の奴でもソースコードがパっと見で何となく分かるという感じなのだろうか
-
何語で書かれようと結局のハードルは
文法構造(構文)や命令(ステートメントやオペレーター)や標準関数や標準マクロの名前や予約語を覚えたり
変数や配列や数値や文字列や演算やスコープや参照などのプログラミング共通の基本概念を覚えたりと
そこらへんだろうからプログラミング言語が日本語セットである必要性が全くないんだよねえ
-
日本語プログラミング言語の「なでしこ」や「ひまわり」はよく知らんが
昔「ロゴライター」という日本語バージョンの「LOGO言語」なら使ったことあるけど、ロゴライターは使いやすかったぞ
-
小学校のクラブ活動でパソコンクラブってのがあってロゴライターを採用しててそれで使ったんだけど
あれのおかげでプログラミングの基本概念を身につけられたと言っても過言じゃないわ
-
ペンを持ったカメを操作して画面に絵を描いたりするんだが
たとえばを辺が100pixelの正方形を描くメソッドを作るなら
てじゅんは せいほうけい
ペンをおろせ
まえへ 100
みぎへ 90
まえへ 100
みぎへ 90
まえへ 100
みぎへ 90
まえへ 100
みぎへ 90
てじゅんは おわり
みたいな感じ
-
ペンをあげろ を入れ忘れたw
ペンを持った亀を移動させて絵を描くんだが
ペンをあげさせて亀を移動させないと移動した軌跡に線を引いてしまうんだよw
-
でコンソールみたいなところから
せいほうけい[Enter]
でメソッド「せいほうけい」を実行するわけ
「てじゅんは」ってのがようはプロシージャやサブルーチンの宣言なわけだが
作ったメソッドを他のメソッド内からも呼び出せるんだよ
まぁLOGO言語がそのまま日本語になった感じのようだから下手な説明するのも無粋というものだが
-
20年以上昔に使ったものだから>>406のが正しいかどうかはちょっと分からんがw
-
タートルグラフィックだな
-
プログラミング体験談とかもっと聞かせてくれ
-
N88-BASICとかの行番号付きBASICって内部的にどういうふうにコードを保持してるんだろう
普通は行番号は10単位くらいあけて書くし6万行分のコード保存用の配列を用意してるってわけじゃないだろうし
リスト構造で前後を繋いでるのなら挿入は楽そうだけどGOTOとかのジャンプ命令が大変そうだし
行番号順に並べる必要あるからハッシュテーブルじゃなさそうだし
木構造で管理してんのかな、だとしたら何木だろう
-
もしかしてヒープ構造とかか?
-
あるいはB木とかかな
-
B木はやはりジャンプが不利か
ヒープ構造ならジャンプ有利にはなるけど行番号ソートがやや手間だがヒープで実現するのが一番しっくりくるか
-
いやまてまて、ヒープはジャンプ有利とはいえないか、ジャンプ先の探索手間はリスト構造よりは圧倒的優位かもしれが
ヒープが配列で実現できるからといって飛び飛び番号順だし木構造と探索は大差ないか
-
しかし木構造だと深くなると行番号順の実効そのものに影響が大きそうだし、やはりヒープか
-
ギャップバッファってのがある
テキストエディタでよく使われる効率の良いアルゴリズムだけど普通に連結リストだと思う
gotoは別の形で保持しとけばいいし
-
行番号と配列のマッピングするとなると6万行分の配列を用意するか、ハッシュテーブルを使うかすれば探索コストは落ちるだろうけど
あの古いPC上で運用するとなるとメモリ制限からしてハッシュテーブルでも使ってるのだろうか
-
>>418
>ギャップバッファ
おおサンクス
これ調べてみる
-
>>420
CとかでBASIC作ろうとしてるなら行単位連結リストでいいと思うよ
さっきも行ったようにジャンプは別にテーブル用意しとくのが得策だと思う
-
>>421
ヒントありがと
参考にする
-
なんか難しそうな話してんな
-
ハイレベルすぎるは
-
これを難しいとか言う奴はどういうことしてるんだろう
-
言語そのものを作るってのはかなり趣味の濃いとこじゃねの
-
GCの実装のバグが直せないから寝れない
>>426
それ以前の問題な気がする
-
データ構造とかの話は入門書などに書いてある範疇からは超えてる
-
新しい言語はライブラリが豊富だから細かいことは気にせず楽ちんに色々作れる
-
×新しい言語
○最近の言語
-
Cを投げ捨ててpythonとかjavaで書きたいけどここで逃げるわけにはいかない
-
pythonみたいなスクリプト系とかjavaとかはプラットフォーム依存度が低いから扱いやすそう
cはプラットフォーム依存度とかどこのコンパイラかでかなり違うというのが面倒そう
-
GCってメモリ管理も作るとかすげえな
-
そういえばこんなスレあったっけ
-
>>434
お前さては>>1だな
-
違うよ、昔ヒキ板(本家)にこういうスレあったっけって思ったんだ
確かに時期的にこのスレの>>1でもおかしくはないな
-
んだ
-
今はmciSendStringを使ったMP3プレーヤーでも作ってみようかと挑戦中
-
Windowsね
-
本スレ書き込めねぇ…
-
無慈悲な規制
-
書き込みたいことがあるならこっちに書き込めばいいと思うよ
-
mciSendStringなかなか面白いけどVB6から使うのはやや不便かな
-
いい加減VB6なんて捨てたら
-
せっかく買ったもんだから減価償却したいし
-
Cでlispインタプリタ作るの挫折してJavaで作りなおしたら3日で完成した
今までの苦労は何だったんだ
-
Shell32.dllメモ
ShellオブジェクトのFolderクラスのメソッドGetDetailsOfの第一引数にNull(?)を渡すと第二引数に対応するプロパティ名が取得できた
-
Shell32.dllメモ
ShellFolderItemクラスのExtendedPropertyに指定するプロパティ名は日本語プロパティ名の指定では取得できなかった
また英語でも取得できないものがいくつかあった
-
結局Cを投げ捨てちゃったのか
-
lispって引数を再帰的にリストとして処理してけばいいんしょ
-
違うよ
一つ目の引数を関数として評価したあと2つ目以降の引数を評価したものを一つ目で出来た関数に渡すんだよ
-
3日で作るとかこのレベルかね
純LISP - Wikipedia
https://ja.wikipedia.org/wiki/%E7%B4%94LISP
-
S-expression - Wikipedia, the free encyclopedia
https://en.wikipedia.org/wiki/S-expression
ようはS式のツリー構造で順番で処理してけばいいんしょ
たぶんきっと簡単に作れそう
-
ん?なんで(A B C)は(A . (B . (C nil)))で(A . (B . C))じゃないんだ?
-
プログラミング言語NuでLispプログラミング 〜S式の使い方〜 (1/3):CodeZine
http://codezine.jp/article/detail/4835
ツリー構造じゃなくリスト構造ぽい?
-
知らんがな
-
リストプロセッサーの略がLispなんだからリスト構造
-
>>452
純LISP + 評価前にマクロと準クォートの展開、エラー検出、文字列型、loopとreturnで繰り返し出来るようにしたよー
>>453
作る前は簡単だと思うけど思わぬところで詰まって鬱にならないように気をつけたほうがいいと思う
-
>>452
これcond、quote 、lambda、defineが何なのか説明してないとか説明不足すぎだんろ
-
>>452
これの説明つかわれてるatom[(A B)]とかの表記ってM式か、なんで日本語WikipediaにはM式の説明がないんだよ
-
>>454
(A . (B . C)) は (A (B C)) を表す
-
ドット カッコが連続して表示されてるところだけ省略されるから(A B . C)
-
うむ
-
むずかしいな
-
何使って作ってるの?
-
Scheme(Lisp)の日本語解説
http://people.csail.mit.edu/jaffer/r5rsj_toc.html
-
Revised(5) Report on the Algorithmic Language Scheme - 7. 標準手続き
http://people.csail.mit.edu/jaffer/r5rsj_8.html#SEC60
-
>>465
これから純Lispを作る
どの言語で作るかはまだ決めてない
手持ちの環境は Visual Basic(VS2010), C#(VS2010), C++(VS2010, Borland, Watcom), Java7, ActionScript(Flex SDK), Perl(Strawberry), PHP は揃えた
ほかにブラウザで使えるJavaScript, JScript, VBScript、MS Office付属のVBA がある
-
The LISP Programming System
http://www-formal.stanford.edu/jmc/recursive/node4.html
これのとおりに実装すりゃいいのかな
-
先にlisp処理系入れてみてcons,car,cdrで遊んでみればいいと思う
-
ひとまず分かったこと
lispは難しい
-
こんなかんじか
function hoge(str, list){
var i, c, s, newlist, t = 0;
/** t
* 0 一つ目の要素の読み取り開始前段階
* 1 一つ目の要素はシンボルで読み取り中
* 2 一つ目の要素はリスト
* 3 一つ目の要素を登録完了
* 4 一つ目の要素と二つ目の要素を繋ぐ'.'読み取り前段階
* 5 二つ目の要素の読み取り開始前段階
* 6 二つ目の要素はシンボルで読み取り中
* 7 二つ目の要素はリスト
**/
for (i = 0; i < str.length; i++) {
c = str.charAt(i);
if (c == '(') {
if (t == 0) { //一つ目の要素はリスト
newlist = new Array();
i += hoge(str.substring(i + 1), newlist);
t = 2;
} else if (t == 4) { // . の省略、二つ目の要素はリスト(そのリストの一つ目の要素がリスト)
newlist = new Array();
i += hoge(str.substring(i), newlist);
t = 7;
} else {
throw new SyntaxError();
}
} else if (c == ')') {
if (t == 1) { //要素が一つしかない(要素はシンボル)
list[0] = s;
list[1] = "nil";
} else if (t == 2) { //要素が一つしかない(要素はリスト)
list[0] = newlist;
list[1] = "nil";
} else if (t == 6) { //二つ目の要素(シンボル)の登録
list[1] = s;
} else if (t == 7) { //二つ目の要素(リスト)の登録
list[1] = newlist;
} else if (t != 0) { // t==0 は空のリストになる
throw new SyntaxError();
}
return i + 1;
} else if (c == ' ') {
if (t == 1) { //一つ目の要素
list[0] = s;
t = 3;
} else if (t == 2) { //一つ目の要素はリスト
list[0] = newlist;
t = 3;
} else if (t == 4) { //次にくるのは2つ目の要素
t = 5;
} else {
throw new SyntaxError();
}
} else if (c == '.') {
if (t == 3) { //このリストは略式でない
t = 4;
} else {
throw new SyntaxError();
}
} else {
if (t == 0) { //一つ目の要素のシンボル開始
s = c;
t = 1;
} else if ((t == 1) || (t == 6)) { //シンボル文字が続く
s += c;
} else if (t == 4) { // . が省略されてるので二つ目の要素はリスト(そのリストの一つ目の要素がシンボル)
newlist = new Array();
i += hoge(str.substring(i), newlist);
t = 7;
} else if (t == 5) { //二つ目の要素のシンボル開始
s = c;
t = 6;
} else {
throw new SyntaxError();
}
}
}
return i;
}
list = new Array();
try {
hoge(str.replace(/\./," . ").replace(/ +/,' '), list);
list = list[0]; //listの最初要素が分解したものとなる
} catch(SyntaxError se) {
alert('Syntax Error!');
list = null;
}
-
試してないから動くか知らんけど
分解したあとは順次処理してけばOKやろ
-
ああ最後のほうミスってるな
for文抜けたあとの return i; は間違いだわ
>>472は無しな
-
修正版
function hoge(str, p, list){
var i, c, s, newlist, t = 0;
/** t
* 0 一つ目の要素の読み取り開始前段階
* 1 一つ目の要素はシンボルで読み取り中
* 2 一つ目の要素はリスト
* 3 一つ目の要素を登録完了
* 4 一つ目の要素と二つ目の要素を繋ぐ'.'読み取り前段階
* 5 二つ目の要素の読み取り開始前段階
* 6 二つ目の要素はシンボルで読み取り中
* 7 二つ目の要素はリスト
**/
if ((p == 0) && (str.charAt(0) != '(')) {
throw new SyntaxError();
}
for (i = p; i < str.length; i++) {
c = str.charAt(i);
if (c == '(') {
if (t == 0) { //一つ目の要素はリスト
newlist = new Array();
i += hoge(str, i + 1, newlist);
t = 2;
} else if (t == 4) { // . の省略、二つ目の要素はリスト(そのリストの一つ目の要素がリスト)
newlist = new Array();
i += hoge(str, i, newlist);
t = 7;
} else {
throw new SyntaxError();
}
} else if (c == ')') {
if (t == 1) { //要素が一つしかない(要素はシンボル)
list[0] = s;
list[1] = "nil";
} else if (t == 2) { //要素が一つしかない(要素はリスト)
list[0] = newlist;
list[1] = "nil";
} else if (t == 6) { //二つ目の要素(シンボル)の登録
list[1] = s;
} else if (t == 7) { //二つ目の要素(リスト)の登録
list[1] = newlist;
} else if (t != 0) { // t==0 は空のリストになる
throw new SyntaxError();
}
return i + 1;
} else if (c == ' ') {
if (p == 0) { //一番外側の括弧である必要があり構文エラー
throw new SyntaxError();
}
if (t == 1) { //一つ目の要素
list[0] = s;
t = 3;
} else if (t == 2) { //一つ目の要素はリスト
list[0] = newlist;
t = 3;
} else if (t == 4) { //次にくるのは2つ目の要素
t = 5;
} else {
throw new SyntaxError();
}
} else if (c == '.') {
if (t == 3) { //このリストは略式でない
t = 4;
} else {
throw new SyntaxError();
}
} else {
if (t == 0) { //一つ目の要素のシンボル開始
s = c;
t = 1;
} else if ((t == 1) || (t == 6)) { //シンボル文字が続く
s += c;
} else if (t == 4) { // . が省略されてるので二つ目の要素はリスト(そのリストの一つ目の要素がシンボル)
newlist = new Array();
i += hoge(str, i, newlist);
t = 7;
} else if (t == 5) { //二つ目の要素のシンボル開始
s = c;
t = 6;
} else {
throw new SyntaxError();
}
}
}
if (p != 0) { //再帰呼び出しで文字列を読み取り終わってしまっている
throw new SyntaxError();
}
if (t != 2) { //このエラーは発生しないはず
throw new UnknownError();
}
list[0] = newlist;
return i;
}
-
修正版つづき
list = new Array();
try {
hoge(str.replace(/\./," . ").replace(/ +/," ").replace(/ $/,""), 0, list);
list = list[0]; //listの最初要素が分解したものとなる
} catch(SyntaxError se) {
alert('Syntax Error!');
list = null;
}
-
あー、今気づいた、>>475-476も無しね
致命的なミスがあるわ
-
たしかにlisp難しいね
-
パーサー(?)ってので手こずって俺ダメぽ
-
もう眠いから修正は明日にするわ、おやすみ
-
このhogeがパーサーの部分を実装してるのだとしたら
字句解析とそれを内部データでS式を表現するreadに分けるべきだと思う
|
|
掲示板管理者へ連絡
無料レンタル掲示板