2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

J言語

1 :デフォルトの名無しさん:2010/01/12(火) 19:17:30
APLの後継、J言語についてなんか書くスレ。

本家(J software)
http://www.jsoftware.com/

2 :デフォルトの名無しさん:2010/01/12(火) 19:48:47
アイちゃんも来ないのかよw

3 :デフォルトの名無しさん:2010/01/12(火) 22:41:46
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所


4 :デフォルトの名無しさん:2010/01/12(火) 23:55:17
J使いはいないんだろうかw

FizzBuzz問題をJでやってみた。
ググって見ると何人かの人がやってみたようだが。

fb =: 3 : 0
fb0 =: 3 : 'if. 0=15|y do. <''FizzBuzz'' elseif. 0=3|y do. <''fizz'' elseif. 0=5|y do. <''Buzz'' elseif. do. <y end.'
fb0"0 >: i. y
)

2行目はアレだが、3行目はJっぽい処理の仕方じゃないかと思う

5 :デフォルトの名無しさん:2010/01/13(水) 10:27:49
本当に誰も来ないな…

ふと思って試してみたんだが、explicit deffinitionは無名関数として使えるっぽい。

( 4 : '2 * x + y') / 1 2 3

で、ちゃんと期待する結果(22)が出る。

6 :デフォルトの名無しさん:2010/01/17(日) 23:24:17
おお、とうとうJ言語もスレができたんですね。
では、ごあいさつがわりに私もFizzBuzzを。

wd&.>(<'FizzBuzz')(I.0=15|n)}(<'BUzz')(I.0=5|n)}(<'Fizz')(I.0=3|n)}<"0 n=.>:i.100

7 :デフォルトの名無しさん:2010/01/19(火) 22:53:44
一人でやってるとなんか言いたくなることがあるんで、立ててみました。
本家のフォーラムや個人のblogにレスつけられる程じゃないんで。

FizzBuzzはそう言う書き方もあるんですね。 } のその使い方は初めて知りました。
組込みの配列処理動詞は覚えて多用すべきなんでしょうが、数が多いのと、自分の
用途(簡単な数値計算)にはあまり使わないのとで、ごく簡単なもの以外は放置状態です。

8 :デフォルトの名無しさん:2010/01/19(火) 23:24:57
で、なんか言ってみる。

複数の動詞の和の形のtrain (v1+v2+... +vn) が、
 (v1 y)+(v2 y)+ .... +(vn y) のように働いて
くれたらなぁと思って試してみたら、実際そう動いた。

一応、trainの評価規則を確認してみると自然に
そう言う評価になるように作ってあるようだ。
うまく考えてあるなぁと感心した。


9 :デフォルトの名無しさん:2010/01/20(水) 00:26:38
J言語は個別の要素の書き換えがめんどうですね。
Cなどで配列aの要素に代入する場合

a[0]=1

ですがこれと同様のことをJでかくと

a=:1(0)}a

になってわかりにくいです。
でも驚きを与えてくれる不思議な言語で結構きにいってます。

10 :デフォルトの名無しさん:2010/01/20(水) 23:50:33
> J言語は個別の要素の書き換えがめんどうですね。

確かに。
JやAPL流のコーディングスタイルでは配列の要素を個別に処理する事はあまりないから、デザイナーとしてはその辺の冗長さは気にしてないって事なんですかね?

> でも驚きを与えてくれる不思議な言語で結構きにいってます。

俺レベルだと、驚くよりも難解な仕様に首をひねることの方が多いですよw

今日も x { y の使い方を覚えるので一苦労しました。 左引数の構造が、
要素指定の方法によって一見バラバラに見えて、しばらく途方にくれましたよ。


11 :デフォルトの名無しさん:2010/01/23(土) 07:59:59
私の場合、Jの使い道は
anarchy golf
http://golf.shinh.org/
の問題を解くことぐらいなので
ほんの数行のプログラムしかかいたことがありません。

12 :デフォルトの名無しさん:2010/01/23(土) 14:37:02
>>11
リンク先見ましたが、Jは健闘してますねぇ。
俺もなんか解いてみようとしましたが入出力の仕様がよく分からないんでやめました。

13 :デフォルトの名無しさん:2010/01/23(土) 15:32:43
私にわかる範囲のことであればお答えしますので
ぜひ解いてみてください。

14 :デフォルトの名無しさん:2010/01/24(日) 11:20:42
thx
でもまあ、一応自分で公開済みのソース見て考えてみますよ。

15 :デフォルトの名無しさん:2010/01/26(火) 13:47:05
TIOBE Programming Community Index for January 2010
ttp://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

46位。
意外に多い。

16 :デフォルトの名無しさん:2010/01/26(火) 22:48:30
つーかそのランキングおかしいだろw
D言語がCOBOLやJavaFX抜いてるとかねぇよwww
PL/IやVHDLがJより下ってのも絶対にありえん

17 :デフォルトの名無しさん:2010/01/26(火) 23:23:45
これコミュニティ数でしょ?
企業で使われてるけど趣味で使わないみたいな言語が下位になっているのでは

18 :デフォルトの名無しさん:2010/01/27(水) 20:29:52
なんで、そんな小ネタにだけ反応するんだよw


19 :デフォルトの名無しさん:2010/01/27(水) 20:30:57
ネタがないので、前から気なってるJの変数周りの妙な動作について。

受け取った2項動詞をそのまま返すだけの副詞hogeを定義する。

hoge =: 1 : 0
:
f =. +
x u y
)

で、なんか動詞を食わせて動かしてみる。

1(+ hoge)2
3

2(* hoge)4
8

(つづく)

20 :19つづき:2010/01/27(水) 20:37:18
で、適当な変数にバインドしたのを食わせても動作は同じ。

g =: *

2 (g hoge) 5
10

ここまでは異常なし。で…

f =: *

2 (f hoge)5
7

なぜか、hogeの中で定義したローカルな f にバインドされた動詞(+)を呼んでるっぽい。
(オチは無い。)

21 :デフォルトの名無しさん:2010/01/27(水) 23:33:52
>>19
いきなり、むずかしいとこにいっちゃうんですね。
もちろん、私の理解の範囲外です。

22 :デフォルトの名無しさん:2010/01/30(土) 00:27:15
難しいですw 俺も何が起こってるのかよく分かってません。

どうもJではoperatorに動詞を食わせるとその名前が渡る場合があって、
その場合にグローバルとローカルの名前が区別できてないんじゃないか
とも思ったんですが、↓のように戻り値をtacitな定義にすると普通に
動くんで単純にそうとも言えないようです。

hoge =: 1 : 0
f =. +
u
)

まあ、とりあえずの解決策としては動詞をoperatorに食わせる前に f. で
定義に置き換えてしまえばOKなんですが、これもその動詞が $: で
自己参照してると使えないんで若干気持ち悪いです。



23 :デフォルトの名無しさん:2010/01/30(土) 00:49:01
>戻り値をtacitな定義にすると普通に動くんで単純にそうとも言えないようです。

と、書いたがやっぱり単純にグローバル名とローカル名の区別が付いてないっぽい。

>>22のhogeの最終行をいじって、u (hogeの左引数)を必ず評価して返すように変更すると、
>>19-20の結果が再現された。

huga =: 1 : 0
f =. +
u f.
)

>>20のhogeで普通に動いて見えるのは、多分、uにバインドされた名前 ' f ' がそのまま返って、
元のコンテキストで評価されるからなんだろう。

24 :デフォルトの名無しさん:2010/02/05(金) 22:02:29
これはどう解釈したらいいんだろう。

a=:'N='&,":
a 7
N=N=N=N=N=N=N=7

25 :デフォルトの名無しさん:2010/02/06(土) 00:23:05
dictionaryを調べたら & の用法に x m&v y ? m&v^:x y てのがありました。
要するに「(m&v)をyに対してx回作用させる」と言う事のようです。
件の定義の 'N='&, の場合、yの頭に文字列'N='をx個くっつけると言うことになります。

で、全体としては ('N='&,) ": は典型的な hookで、monadとしてtacitに書くと
 y ('N='&,) ": y となるので、例示の通りの動作となります。

26 :25訂正:2010/02/06(土) 00:28:34
【誤】 x m&v y ? m&v^:x y

【正】 x m&v y ⇔ m&v^:x y

【誤】tacitに書くと

【正】explicitに書くと

27 :デフォルトの名無しさん:2010/02/06(土) 11:53:21
ついでですが、 dyadとして使った場合は x ('N='&,) ": y (dyadic hook)となって、

2 a 7
N=N=7

のように左引数でN=の数を別に指定できます。

28 :デフォルトの名無しさん:2010/02/11(木) 08:00:12
>>25-27
説明、ありがとうございます。
そうか、単項動詞のつもりが、二項動詞になっているのか。

29 :デフォルトの名無しさん:2010/02/16(火) 18:15:05
どういたしまして。

30 :デフォルトの名無しさん:2010/02/16(火) 18:22:44
独り言。
Learning Jを一通りさらおうとしてるが16章の配列要素の操作の説明が略しすぎで苦労した。
dictionaryも凝った例で読みにくいし、自分でいちいちテストデータを考えて動詞の機能を
試す羽目に。

正直ちゃんとした日本語の解説書か、英文でいいから普通の形式の仕様書が欲しい。

31 :デフォルトの名無しさん:2010/02/20(土) 18:50:34
巷では基礎文法最速マスターなるものが流行りのようで
あっというまにいろんな言語についてかかれていく。
でもまあ、J言語はないだろうなあと思っていたら
ありました!

J言語 基礎最速マスター - yamblog
http://d.hatena.ne.jp/yambi/20100216/1266312276

32 :デフォルトの名無しさん:2010/02/23(火) 00:51:29
アルファベットの大文字、小文字をならべた文字列
をつくるのにあれこれやっていたらこんなのができた。

'A a'=:0 7{;:65}.a.
A
ABCDEFGHIJKLMNOPQRSTUVWXYZ
a
abcdefghijklmnopqrstuvwxyz

33 :デフォルトの名無しさん:2010/02/24(水) 19:26:26
>>31
こう言うのを簡単に書ける人がうらやましい。
配列操作周りも書いてくれw

>>32
;: が大文字列、小文字列を名前として解釈するのを利用するわけですか。
アイデアですねぇ。

試しに英数字の間にある記号列をインタプリタに食わせてみたら、殆どの部分が
tacitな定義として解釈されましたよw

34 :デフォルトの名無しさん:2010/03/03(水) 10:55:18
本家のメーリングリストの購読を始めた。

35 :デフォルトの名無しさん:2010/03/05(金) 12:07:32
なんかもうすぐ次期バージョン(J7)のベータが公開されるらしい。

36 :デフォルトの名無しさん:2010/03/06(土) 09:38:58
これは、まずい。

パソコンでlog 3を求めたいです。(底は2です) - Yahoo!知恵袋
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1235210262

logを求める質問にJ言語を使えば簡単ですよという回答で
0j20":x:2^.3
1.58496250072119330535
で小数点以下20桁まで求められるというのだが...
floatの精度のものを有理数にしても精度は変わらない。

37 :デフォルトの名無しさん:2010/03/06(土) 11:59:32
special codeなんですかね。

2 ^. 3
1.58496

x: 1.58496
4953r3125

としかならないですし。

38 :デフォルトの名無しさん:2010/03/06(土) 12:24:13
ああ、>>37はあまり意味がないか。

x:抜きで計算させると↓となるので、x:が頭に付いた式は中でなんかやってるんじゃないかと。

0j20":2^.3
1.58496250072115630000

とまで書いて、ふと思いついてやってみた。

a =: 2^.3

0j20": a
1.58496250072115630000

0j20":x: a
1.58496250072119330535

2^.3はaにバインドされる前に評価されてる筈だから、^.自体元から拡張精度で計算されてるっぽい?

39 :デフォルトの名無しさん:2010/03/06(土) 21:16:07
底が2のlog(3)をwindowsの電卓で計算すると
1.5849625007211561814537389439478

念のためmaximaでも計算。
(%i34) (fpprec:32,bfloat(log(3)/log(2)));
(%o34) 1.5849625007211561814537389439478b0

0j20":x:2^.3
1.58496250072119330535
結局、J言語の計算は小数点以下13桁までしか正しくないようだ。

40 :デフォルトの名無しさん:2010/03/16(火) 21:52:11
本当に誰も使ってないんだな

悲しくなってきた

41 :デフォルトの名無しさん:2010/03/16(火) 22:31:19
だがそれがいい

42 :デフォルトの名無しさん:2010/03/17(水) 10:56:25
まあ、特定用途向けのライブラリとか薄いっぽいし、実用しようって人間は
少ないだろうな。

43 :デフォルトの名無しさん:2010/03/25(木) 23:50:46
ついにJ7 betaが。
ttp://www.jsoftware.com/beta.htm

44 :デフォルトの名無しさん:2010/03/28(日) 12:11:58
>>43
新しい機能とか、あるのかな。


45 :デフォルトの名無しさん:2010/03/28(日) 21:16:40
「フロントエンドが今度からhtmlとGTKベースになるとか書いてある。
で、htmlのフロントエンド開いても今ひとつ使い勝手が良くない。
ヘルプもj602のままだし。

46 :デフォルトの名無しさん:2010/04/13(火) 14:44:13
保守
ここのところはJで作ったアプリケーションを使ってるだけで学習は進んでない。
オブジェクト指向分析設計の本を読んでるんで、暇になったらJへの適用を
試してみようと思ってる。

47 :デフォルトの名無しさん:2010/06/05(土) 00:11:56
保守
最近はちょっとずつ"learning J"の抄訳+αをやってる。

48 :デフォルトの名無しさん:2010/07/05(月) 00:51:43
前に

(3 :'y+y')5
10

みたいに明示的定義でも名前をつけずに使えるという話があったけど
複数行の定義でもできるとは知らなかった。

(3 :0)5
y*y
)
25

さらにこんなのもありなのね。

((3 :0)10),(3 :0)10
y+y
)
y*y
)
100 20

49 :デフォルトの名無しさん:2010/07/06(火) 21:35:29
>>48
どう言うメカニズムでこんなことが起きるのか不思議ですね。
(種あかしはしないでくださいよw自分で何とか考えてみます)

50 :デフォルトの名無しさん:2010/07/06(火) 21:37:55
でもって、独り言。
携帯電話のキャリアを乗り換えたのを機にwindows mobile

51 :デフォルトの名無しさん:2010/07/06(火) 21:45:14
(>>49続き)
搭載のスマートフォンを導入したんだが、これにJのPocket PC用を入れてみた。
入れてみてデモを走らせただけで全然使ってないがw

52 :デフォルトの名無しさん:2010/07/07(水) 00:10:18
APLはここでおk?

53 :デフォルトの名無しさん:2010/07/07(水) 16:07:12
まあいいんじゃないですか?Jのご先祖だし。


54 :デフォルトの名無しさん:2010/07/07(水) 19:35:27
HSPレベルの自己満言語?

55 :名無しさん@そうだ選挙に行こう:2010/07/10(土) 09:32:53
本家サイト以外でこんなにたくさんのJ言語のコードを
見るのは初めてだ。

Category:J - Rosetta Code
http://rosettacode.org/wiki/Category:J

56 :名無しさん@そうだ選挙に行こう:2010/07/10(土) 19:39:47
ふーん

57 :デフォルトの名無しさん:2010/07/13(火) 13:00:45
>>55
Roger Huiまで来てるし、本家メーリングリストのの出店と化してるようなw

15 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)