レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。
ヒッキープログラミングスレ
プログラミングの話題のスレ
質問・相談
初心者からプロまで
プログラミングに関することなら何でもOK
そうえいばjavaで作られたclojureにそういう機能があった気がしたから調べてみたらあったttp://ja.wikipedia.org/wiki/Clojure
これのGUI版のハローワールドでswing呼び出してるけどどうやってやるか全然わからん
>clojure
そのwikipediaをざっと見てみたけど
面倒そうな機能は丸ごとjavaに投げててワロタ
clojureはjavaのバイトコードにコンパイルされるのか
ならばバイトコードの仕様通りに引数とかスタックに詰んでクラス名とメソッド名をコールするだけかな
なるほど
まずはjavaのバイトコードにコンパイルする機能を付けないとダメなのか
これ俺だけじゃ思いつかなかったよ、貴重なアドバイスありがとう
メソッド呼び出しは分からんけど
コード上なら
m = MyClass.getClass().newInstance();
とかでクラスのインスタンスなら作れたと思うから
(java-class "MyClass")
とかでインスタンス作るくらいならできそうだけど
メソッドとかプロパティとかメンバアクセスやインターフェースとかどうするんだろうな
ああ、任意クラス取得は
Class.forName("MyClass").newInstance();
か
Class (Java Platform SE 6)
http://docs.oracle.com/javase/jp/6/api/java/lang/Class.html
なるほどね、Classクラスにインスタンス生成からメソッド取得まで一通りそろってるくさいね
それ使えば楽にJavaの資産使えるかな
なんかもう寝たほうがいい時間なのに興奮してきた
すげえな、究極ClassクラスとObjectクラスだけでなんやかんやできそうだな、面倒そうだが(笑)
まぁバイトコード上のデータ見ればクラス名とか定数としてそのままで羅列されてるしね・・・JavaVMの仕様上で言えばそう難しくないって話か
たしかね、>>759 の話を知ったのはjava製の麻雀ゲーム(ローカルアプリ)の公開してるサイトだったかで
インターフェースを実装することで自作のコンピュータ対戦相手の思考処理のクラスを入れられるとかのやつで
その実現方法にそんな感じのことやってたんだよね、それが印象的でちょろっと調べて面倒そうな感じだったから
その時はあんま深く調べなかったんだけどw
まぁ訊かれても無いのに身の上話とかしてるわけだが俺ってやつわw
Classクラスの使い方説明してるサイトとか見ないと流石にAPIドキュメントの記述だけじゃ扱うのは俺には無理かなあ
機会日本語訳だからというわけじゃないが、イミフな記述多いし
そういやJDK7の日本語ドキュメントも公開されてたんだっけか、まぁDebianなら安定板ばかりという話だしOpenJDKだしまた違うかもしらんが
>>751
ちなみにsqueezeが気に入った理由は当時使ってたPCにインストールできたディストリがsqueezeだけだったというだけ
knopixやpuppyとかのliveCDすら動かんかったし、(他のPCでは使えたんだけどね)
別のパソコンにfedora入れて使ってみたり、大学のPCにはRed Hatが入ってたからそれ使ってた(くだんのJavaAppletの授業で使ってたわけだが)
今はopenjdk6使ってるわ
Classクラスについてはどうやって扱えばいいか全然わからん
そろそろ体系的にJavaを勉強したほうがいい気がしてきたけど今日はもう寝る
生活リズムは守ったほうが健康にいいからな
おやすみ
>>777
squeezeって最近じゃない?
少し前まで大学生だったのかな
>>778
すまん、時系列的には書いてない
red hat使った大学時代は10年以上前、squeeze使ったのは数年前だ(今もVirtual Boxにインストールはしてあるが)
天鳳とかネットサーフィンが主の俺にとってはLinuxやFreeBSDのデスクトップ環境は無用の長物だったがな(しかもインストールしたPCがポンコツの希少種すぎてアホ動作しかしなかったが)
Virtual BoxにインストールしたDebianとかFreeBSDとか入れてマジ感動したわ、ちゃんとしたデスクトップ環境が築けたからな・・・もうホントあのPCはポンコツすぎた
あのポンコツPC上では
Debianはまだよかった、lxdeのやつが入ったから(色々アプリがハードウェア起因のエラーでまくりだったが)
FreeBSDなんか最小構成のCUIのみの簡素なやつしかインストールできなかったからな、ちまちまX Window入れてWindow Manager入れて色々試して大変だったな
しかも結局日本語環境構築できたのがWindow Makerだけで、圧倒的知識不足だった・・・まぁ今も知識は増えてないが、まぁこちらもハードウェア起因のエラーでまくりで酷かった
それがどうだ、このしょぼネットブックではあるがVirtual Box上にDebianもFreeBSDもインストールしてみたら!普通にデスクトップ環境入るし普通にGNOMEも動くし何これすばら!
だったけど、まぁPCのスペック上仮想デスクトップとして普通に使うには無理があったがな
結局今はDebianをHTTPサーバーとしてだけ稼働させてるわ、俺がやってるサイトのテスト環境として・・・レン鯖がlinux鯖だしね
またどうでもいい自分語りに脱線してしまったw
>>751 俺はliveCD以外のlinuxディストリは今は亡きPCとVirtual Box上とVirtual PC上でしかインストールしてないから一般的なDebianの具合とかはちょいと分からん
>>778
簡単にググってみたけど
Classクラスを使うのってリフレクションって言うらしいね
Javaリフレクションメモ(Hishidama's Java Reflection Memo)
http://www.ne.jp/asahi/hishidama/home/tech/java/reflection.html
このサイトちょいと分かりにくいけど、もうちょっとちゃんとググれば分かりやすいサイトとか出てきそう
Java リフレクション が簡単に / Chat&Messenger
http://sattontanabe.blog86.fc2.com/blog-entry-35.html
この人のフレームワークを借りるとかすれば簡単なのかな
lispで対応を考えるなら
(setq myclass (javaclass-newinstance "jp.hikky.unko.MyClass" x y))
(setq returnvalue (javaclass-invokemethod "hoge" a b c))
みたいな感じになるのかな?
問題は変数の型として新しくJavaのクラスのインスタンスへの参照型みたいなのが必要なのかなん
しかしそうなってくると>>747 みたいなlisp版のwindow扱う関数とか描写関数とかとうまく折り合いが付かなそうだな
Java言語のClassクラスが持つちょっと不思議な性質について - 達人プログラマーを目指して
http://d.hatena.ne.jp/ryoasai/20110329/1301414299
そうかあ、Javaのクラスには <T> みたいな感じの対応する型を指定するみたいなシステムがあったなあそうなると
MyClass<Integer>(x,y)なら
(setq integerclass (javaclass-getclass "java.lang.Integer"))
(setq myclass (javaclass-newinstance "jp.hikky.unko.MyClass" (integerclass) x y))
こんな感じか、まぁここまでやるとlispコードでアプリを作るくらいなら最初から最後までjavaだけでアプリつくればいいジャんって話になっちまうか・・・
いやいやまて、この設計だと問題があるな
MyClass<MyClass<Integer>>みたいな糞みたいな宣言ができなくなるなあ・・・
あ、でもそのサイトだと<T>を使ったのはエラーになるかんじ?
仮にlisp側から呼び出すのを実装するとClass<Object> c = Class.forName("MyClass").newInstance();になるのか、lisp上で型名とか指定とか無意味か
間違えたObject<Object> c = Class.forName("MyClass").newInstance();だな、Classで受け取るなら Class<Object> c = Class.forName("MyClass");か
Javaは詳しくないから<T>これとか使い方分からんがClass<?> c = Class.forName("MyClass");なのかな?あとObject<Object>はエラーだっつうのw
まぁ一度Classクラスの変数に入れるのは手間だからObject c = Class.forName("MyClass").newInstance();といったところなのだろうか
まぁともかく俺のレベルじゃJavaのこの機能をlispでラッピングするのは無理だわ
javaのこの機能を俺が使うことは当面なさそうだし、純lispかmp3プレーヤーかphpサイトのほうにちゃっちゃととりかかるべきだな
なんか糞面倒だしただの劣化clojureになりそうだしこのリフレクションとかいうのは諦めようかな
この機能はゲームのAIで使えるみたいだからその時があれば覚えとこう
グラフィック機能についてはお遊び程度で満足したからあとはマウスと画像を使えるようにすればいいか
あああ、純lispに設計ミスがあったぽい・・・オオ・・・マイガ
んん、まて純lispの論文を見直したら、間違って無かった、アレ?あれ?よく分からんくなってきたぞ
うーむ、これ確実に”リスト”という区切りがあるのあ
lispを配列構造にまとめて収めようとするときリストの単位の区切りのマークが必要ってことか・・
そんなことないと思う
((A . B) C) と (A B C) じゃあこれって同じリストってこと?
もしリストの区切り情報なしに配列に収めるとすると
((A . B) C)も(A B C)も A B C NIL というデータ上表現は同じになって同じリストってことになるけど
論文のだとcar[((A . B) C)]=(A . B)ということだから情報リストの区切りが存在すると思うんだけど
>>807
{{A . B} C}と{A B C}にすればいいと思う
carはリストの先頭を
cdrはリストの2つ目以降を
得る関数にすればいいんじゃないかな
俺がやろうとしてることは単純な配列上にlispのコードを並べようという話なんだけどリストの区切り記号を入れないとダメかなあって
#define NIL 0
int list[100];
list[0] = 'A'; list[1] = 'B'; list[2] = 'C'; list[3] = NIL;
このlist[]に((A . B) C)を入れようとすると((A . B) C)は((A . B) . (C . NIL))だけどリストの区切りマークの概念がないと
list[0] = 'A'; list[1] = 'B'; list[2] = 'C'; list[3] = NIL; になって(A B C)と同じデータ構造になっちゃうから
もし((A . B) C)と(A B C)が違う構造のデータであるなら読み込めないかなあって
同様に((A . B) . C) と (A . (B . C)) のデータ構造が違うのならやはり配列に区切り文字を入れないといけないけど単純にドットのデータいれるだけだとこの2つは同じ
list[0] = 'A'; list[1] = '.'; list[2] = 'B'; list[3] = '.'; list[4] = 'C'; になっちゃうし・・・
((a . b) c)は(cons (cons a b) (cons c nil))で
(a b c)は(cons a (cons b (cons c nil)))だからなんかおかしい気がするが気のせい?
リストの最後がnilじゃない時とそうであるときの処理が大変なのかな
もしそうなら前に俺が抱えてた問題と同じみたい
((a . b) . c)をCライクな書き方をするなら
sublist[0] = 'A'; sublist[0] = 'B';
list[0] = sublist; list[1] = 'C';
になるはず
となるとリストの区切りとして括弧の情報が必要ってことなのか
list[0] = '('; list[1] = '('; list[2] = 'A'; list[3] = 'B'; list[4] = ')'; list[5] = '('; list[6] = 'C'; list[7] = NIL; list[8] = ')';
((A . B) C)はこんな感じか
>>814-815
詳しく説明ありがと
やはりその感じだとリストの区切りがあるんだね・・・
あとドットの扱いは(gensym)で作られたシンボルにして間違った位置ならエラーが出るようにしてる
配列じゃなくてリスト構造ってことか
struct list {
void *data;
list *next;
};
ってところか
>>819
Cで作るならそんな感じ
そうだなlispはリストプロセッサーなんだから当たり前だよな、リスト構造と配列をごっちゃに考えてて勘違いしてた、すまん
リスト構造と配列は全然違う構造のデータタイプなのに何で俺はごっちゃに考えて同じものだと勘違いしてたんだ・・・そのせいで余計な時間を費やしてしまった・・・orz
>>820
お手数をかけてしまってすまんかった、俺が1人勘違いして暴走してた・・・
というかCで作ろうとしてるのか?
メモリ破壊バグとの戦いになる予感
俺も費やした時間の9割がそんな感じで投げ出しちゃった
Cはポインタとかallocとかよく分からんから使う気はないけんど
ついに燃え尽きた
もうこれ以上手を入れて機能拡張する気にもならないし実際に使う気にも鳴らなくなった
もう一ヶ月以上CやjavaでLisp実装に時間を使ってるんだよなあ
land of lispも積ん読だしこれからどうしよう
大きくなると1人で管理するのは大変そうだしね
まだ3000行くらいだしそれは大丈夫だけどある程度動いたら満足してしまう
こちとらその十分の一の300行くらいで頭がパンクしそうだよ・・・
ちゃんとしたエディタ使えばもう少し管理しやすくなるんだろうけどね・・・
ごちゃごちゃしてくるとどこで何を処理してこの変数は何だったかとかチンプンカンプンに
>ある程度動いたら満足してしまう
これは俺もあるわ
純lisp今作業とどこおってるし
純lispの論文のevalの実現方法見てるんだが英文のとこちゃんと読まないとちょっと分からない感じだし
labelやlambdaとかかなり複雑怪奇に再現してるぽいし、
引数と本体をリストにして保存すればいけると思う
おそらくそうしてるんだろうけど、解読大変だわこの論文・・・英語がハードルすぎる
あと論文読んでたらeqをこの論文の仕様どおりに作って無かったことに気づいた>>578 のは間違ってた
eqは引数にatomic symbolしかとれずリスト渡すとundefinedにしないといけないのに>>578 としてたからNILになってたわ・・・
読んでいったら>>834 の言う感じの処理があった本当すごいわ・・・
まじかよ当たってたのか
論文からevalまでのlispコード全部書いてみたけどエラー出た・・
エラー検出の機能がテキトーだからlispコードのどこミスったのか分からん・・・さてどうするか
そもそも記述ミスなのか論文の括弧抜けが多いしM式からS式起こすだけじゃダメぽいな・・・
括弧抜けを補足するにはちゃんと理論を理解しないと補足できない
ここかな?とテキトーに括弧を補完したのがたぶん原因かな・・・
今日はもうオシマイ、純lispはまた明日やるとするか
>>838
自分もその問題に今悩まされてる
エラー時にどの行が間違えてるかも教えてくれればいいけどどうやってればいいんだろうな
難しい問題だな・・
もうpythonでlispのコードをpythonのバイトコードに生成してそれを実行しようと考えてみたけどそのほうが遥かに難しいな
それはそれでムズかしそうだな
俺はpythonは全く知らんからコードすら読めない
たしか括弧の代わりにタブインデントで何ちゃらの範囲を決める言語だっけか
そういやCのmakefileも処理部分はタブインデントしないといけないって2年くらい前に知ったわ
それ以前は毎度コマンドラインからコンパイラを呼び出してたけど
makeコマンドの使い方覚えてコンパイルがだいぶ楽になったなあ
なつかしい
それにしても「何ちゃら」が思い出せない、もう歳だなあ・・・物覚え悪いし物忘れ酷いし
ブロックじゃないかな
おお、そうだブロックだ、ブロック構造
ブロック構造なんてたいていのプログラミングに存在する概念だのにすごいド忘れだわ、hahaha・・・
そんな用語知らなくてもプログラム組めるからね
組むだけならね・・・入門書とか資料とかに書かれてて「何だっけこれ?」とかなるのは調べる時間が増えてデメリットはそれなりにあるよ・・・
ブロックをググってwikipeida見たらjavascriptにはブロック構造のスコープが無いってことを今初めて知ったわw
javascriptを初めて使ったのは大学時代の頃合いか10年前後前になるぞ・・・
ブロック (プログラミング) - Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)
ついでにリフレクションも調べた(wikipediaで(藁))
リフレクション (情報工学) - Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%95%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3_(%E6%83%85%E5%A0%B1%E5%B7%A5%E5%AD%A6)
結構いろんな言語が持ってるだね・・知らんかったわ
perl,ruby,javascriptがあってpythonないとかハブられてるな
こうなったらYOUが書いChinaよ!
(´・д・`)ヤダ
そうか・・・まぁ面倒だもんね
ワロタ、またやっちまったw
間違って無限ループコード書いてブラウザ固まったww
それはブラウザが悪いな
無限ループを検出したら警告するべき
そういうもんなのか
javaのスタック浅いから自前で実装したいけどどうやってやるんだろう
スタックってこれ?
Stack (Java Platform SE 6)
http://docs.oracle.com/javase/jp/6/api/java/util/Stack.html
スマートフォン版
掲示板管理者へ連絡
無料レンタル掲示板