[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 05/17 12:59 / Filesize : 125 KB / Number-of Response : 513
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Lisp Scheme Part34



1 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 15:37:08.66 ]
Common Lisp、SchemeをはじめとするLisp族全般のスレです

■前スレ
Lisp Scheme Part33
toro.2ch.net/test/read.cgi/tech/1318150738/

■テンプレ
wiki.fdiary.net/lisp/

■関連スレ
【入門】Common Lisp その8【質問よろず】
hibari.2ch.net/test/read.cgi/tech/1309940115/

2 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 15:41:33.08 ]
SICP taught in Python 3
www-inst.eecs.berkeley.edu/~cs61a/sp12/book/index.html

3 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 23:33:11.59 ]
一乙

4 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 18:27:46.96 ]
lispの便利さを最近実感してきたので
lisp使う人が減るのはむしろ嬉しい

5 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 18:36:59.04 ]
>>4
その見解おかしいよ、廃れて嬉しいって感受性がヤバイよ

6 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 18:45:15.33 ]
勝手にネガキャンしてくれる人のおかげで
便利なものの独占度が高まるなんて
これ以上のことはない

Lispを見えないように水面下で使えるようになるには
1年ぐらい準備期間いる気がする

7 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 19:41:37.95 ]
他の言語には世界中の人間が
寄ってたかって作ったライブラリが山のようにあるのだが

8 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 19:52:33.09 ]
そうだね
その通りだよ

9 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 22:41:31.74 ]
Lispの最大の欠点はまともなGUIライブラリがないことだな
だれかgtkかqtをバインディングしてくれないかな

10 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 22:54:30.22 ]
CLのライブラリは使えないの?



11 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 23:10:06.14 ]
ほとんどの処理系にgtkとqtへのバインディングはあるはず。
誰かschemeのCLOSもどき上にCLIMもどきを作らないかな。もっともGUIビルダーもないし、外見がイケてないから使わない気がするけど。

12 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 23:24:00.90 ]
GObject introspectionに対応すればgtk+3などに自動でバインディングできるようになったらしい。
lispぽく使おうとすると色々ラップする必要はあるかも。

13 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 06:09:09.23 ]
LTkってどうなの

14 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 06:53:30.65 ]
誰も話題にしていないけど、guile2.0来ているんだよなあ。

2011-02-16 GNU Guile 2.0.0 released. ttp://www.gnu.org/software/guile/news.html
+ New REPL, new debugger
A read-eval-print-loop (REPL) is available. Compared
to the REPL in earlier releases, it supports
"meta-commands" that provide convenient access to
interactive programming features. For instance, the
,compile meta-command compiles the given expression,
,profile shows an execution profile of the given
expression, etc.
+ Unicode support
Scheme strings can hold any Unicode character, and
ports can read and write Unicode text in various
encodings.
+ Partial R6RS compatibility
The library and import forms of R6RS are supported,
and all the R6RS libraries defined in the standard
are available. See "R6RS Incompatibilities" in the
manual, for details about remaining
incompatibilities.
+ New dynamic foreign function interface
The (system foreign) module provides a new dynamic
foreign function interface (FFI). It allows bindings
to C libraries to be written without a single line
of C code.

15 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 07:23:53.21 ]
竹内関数でBenchmarkしてみたけど、gaucheと同等の速度になっている。
;;gauche
real 0m0.744s user 0m0.730s sys 0m0.000s
real 0m0.695s user 0m0.690s sys 0m0.003s
;;guile2.0.3
real 0m0.780s user 0m0.773s sys 0m0.007s
real 0m0.780s user 0m0.777s sys 0m0.003s
;;guile1.8
real 0m4.263s user 0m4.193s sys 0m0.003s
real 0m4.510s user 0m4.506s sys 0m0.000s

16 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 10:36:39.02 ]
Guile 2.0っていつの話題だよwほぼ一年前の話じゃん。
2.0.5のアナウンスがc.l.sに来てたぞ。

17 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 11:00:30.91 ]
3.11でバタバタしていたからなあ。
あと自分はschemerじゃないし。

18 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 11:24:24.77 ]
Guileメインの日本人が少ないからでしょ。

19 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 15:21:40.39 ]
太るschemer

20 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 15:34:22.39 ]
ソニックブー



21 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 17:31:05.97 ]
Guile 2.0.5 を MinGW でビルドしようとしたけどうまいこといかへんかった。

22 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 23:39:25.00 ]
ghettojedi.org/shen-js-repl/
Chromeでしか動いてないらしい。

23 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 00:40:46.80 ]
>>22
少し試してみたけど、Firefoxでも動作してるみたいだよ。

24 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 01:04:09.52 ]
処理系何使ってるんだ?やっぱりGauche?
archだとguileだけ異常にシェア高い

25 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 01:15:49.35 ]
>>23
MLなんか読み間違えてた、ありがとう

26 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 02:08:55.32 ]
周辺やwebの情報量から日本限定だとgauche一強のイメージ。性能も良いし、ドキュメントもしっかりしてる。実行ファイルを出したい人以外はgaucheを使ってるイメージ。
あと日本で流行るには日本語が通る、日本人の開発者が居る、あたりが重要。
外人だけだと日本語処理の細かい部分が微妙だったり、ユーザーライブラリは日本語が通りませんになったりする。

archといえばaurのgauche-git版だけど、ビルドの依存にgosh本体がないからビルド出来んぞ。

27 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 06:38:42.56 ]
Archlinux、すごいなあ。
16時間30分後には最新バージョンが使えるようになっている。
ftp://ftp.gnu.org/gnu/guile/guile-2.0.5.tar.xz
guile-2.0.5.tar.gz. . . Jan 30 21:46 6.60M
guile-2.0.5.tar.gz.sig. Jan 30 21:46 198
$ ls -la /tmp/yaourt-tmp-hoge/aur-guile-devel/PKGBUILD
-rw-r--r-- 1 hoge hoge 856 Feb 1 13:36 /tmp/yaourt-tmp-hoge/aur-guile-devel/PKGBUILD
>>26
gaucheは非gauche-git版入れているなあ。

28 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 10:23:38.26 ]
>>22
Firefoxだけど動いたよ

29 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 11:42:50.80 ]
>>22
たぶんこれ。
[Exception... "Security error" code: "1000" nsresult: "0x805303e8 (NS_ERROR_DOM_SECURITY_ERR)" location: "ghettojedi.org/shen-js-repl/repl.js Line: 94"]
code.google.com/p/swfintruder/issues/detail?id=1

30 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 22:43:29.13 ]
ttp://jp.franz.com/index.html
死んだ?



31 名前:デフォルトの名無しさん mailto:sage [2012/02/03(金) 00:45:02.98 ]
>>30
ping は返ってくるね

32 名前:デフォルトの名無しさん mailto:sage [2012/02/03(金) 04:37:37.00 ]
>>30
復活したっぽい。

Page Information

Title: Franz Inc.: Allegro Common Lisp (Japanese)
URL: jp.franz.com/index.html
Document Type: text/html
Last Modified: Thu Apr 22 11:07:21 2004
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Header Information

HTTP/1.1 200 OK
Date: Thu, 02 Feb 2012 19:28:24 GMT
Connection: Close
Server: AllegroServe/1.2.50
Content-Type: text/html
Content-Length: 478
LAST-MODIFIED: Thu, 22 Apr 2004 02:07:21 GMT

33 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 00:43:32.11 ]
よかったよかった

34 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 23:40:01.25 ]
planet.racket-lang.org/
stack やqueueぐらい誰か作ってるだろうと思ったらなかった
racket中途半端だな

35 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 00:59:13.90 ]
キューはあるみたいだよ。

docs.racket-lang.org/data/Imperative_Queues.html?q=queue&q=stack

スタックはリストで簡単に再現できるから、需要が低いんじゃないか。
特化したものを実装したいなら自前で実装するって感じで。単なる想像だけど。

36 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 01:26:17.96 ]
racketの場合set-car!が使えないからスタックは簡単には作れない

37 名前:豆餃子 ◆8X2XSCHEME mailto:sage [2012/02/05(日) 01:51:39.24 ]
スタックを作るのに set-car! が必要かい?

38 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 02:27:38.83 ]
stackoverflow.com/questions/1041603/how-do-i-write-push-and-pop-in-scheme

39 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 06:20:26.84 ]
リスト持ってるだけの構造体(かレコード)かクラス定義すれば、
set-car!使わなくても簡単にスタック実装できると思う。

40 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 02:44:51.36 ]
107 :ec2-50-16-143-240.compute-1.amazonaws.com : :2012/02/06(月) 01:56:49.34 ID:xBgBe+y50
qsocksのソースです
codepad.org/uyuG7Ovg
ちなみにあたしは高校生です
勉強の息抜きに,あひるちゃんでも発狂させて遊ぼうと考えて作りました
主目的の達成はなりませんでしたが,他の変なのが発狂してて楽しかったので良しとします
プログラミング歴は3ヶ月くらいです.マクロとかクラスとか全然わかりません



41 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 03:13:07.15 ]
SchemerのJKだと…? Coqを嗜むJKといい、日本始まったな。

42 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 03:24:09.25 ]
>>40
なんでsxmlつかわんの?
べたで (format "~a ~a ~a ...") とかみてscheme使う意味あるのかと

43 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 03:53:55.90 ]
Schemeって出力付近までS式じゃないとダメなん?

44 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 04:08:57.77 ]
プログラム歴三ヶ月相手に何を言ってるんだ。

45 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 04:42:27.40 ]
>>42
Schemeって言語自体がS式をベースにした単純なものであることが重要なわけで別にそこは全然いらないだろ

46 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 08:03:23.13 ]
JKと聞いて喜び勇んで来たおっさんにそんな無粋な突っ込みしても…

47 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 14:26:16.86 ]
d.hatena.ne.jp/niitsuma/20120203/1328505028
型推論もどきコンパイラー作ったら
Gambit-Cの10倍の速度でた
3倍はありえるけど10倍は何か間違ってる気がする


48 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 14:57:31.32 ]
FFTならあり得るんじゃないの?

49 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 16:43:47.69 ]
flonumをboxしないで扱えるなら圧倒的に強いと思う。
型推論で競うならStalinじゃないか。R4RSで止まってるから実用プログラムを書くのは
しんどいけど。


50 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 19:41:22.41 ]
MacでStalinは動かないようです
もうちょっとがんばってMacで最速と言い張れないか試してみようと思います



51 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 19:51:27.19 ]
chicken-eggsにある移植版stalinならmacでも動くんじゃない?

52 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 22:58:30.75 ]
c.l.sへの投稿乙。興味持ってくれる人いると良いね。

53 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 23:39:04.66 ]
>>51
wiki.call-cc.org/eggref/4/stalin
The compiler has been tested on Mac OS X 10.4 (ppc)

Intel Mac は無理っぽい


54 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 00:02:01.12 ]
>>52
c.l.sって何の略?
アドレス、教えて。

55 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 00:06:42.00 ]
ecl 12.2.1が出てたのに今気付いた。
enable-unicodeがデフォになった。
weak-hashが入ってdrakmaが動くようになった。

Archのextraはまだ前のVer。Aurのgit版は--enable-hoehm=を変更する必要あり。

>>53
Macは持っていないからスマンけど、ビルドが出来るか確認した?
chickenは移植性が高いし、ソースもschemeみたいだけど。

56 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 00:08:00.58 ]
>>54
横レスだけど、たぶんcomp.lang.scheme。

57 名前:SCHEME餃子 ◆8X2XSCHEME mailto:sage [2012/02/07(火) 00:08:55.44 ]
>>54
ニュースグループの comp.lang.scheme のこと。
ネットニュースなので NNTP に対応したクライアントで見るのが本来だが、
サーバが減りまくっていてまともに繋げるところが少ない。
今ではありがたいことに google group 経由で見れる。
https://groups.google.com/group/comp.lang.scheme/topics?hl=ja

58 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 00:32:57.33 ]
stalin本家も移植性に気を使ってるコードだから、手間をかけずに移植できる気がする。
とはいえ型推論するschemeコンパイラの需要は多大なので期待しております。

59 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 01:10:55.72 ]
>>53
www.ibm.com/developerworks/jp/opensource/library/itm-progevo4/
StalinはCを介してネイティブコードを出力するのですが、gcc-4系列ではgcc自身の最適化ルーチンが終了しなくなるので、gcc-3系列を用いて処理系をビルドする必要があります。

Intel Macにgcc3は入らない
discussions.apple.com/thread.jspa?messageID=6900842
iodonacht.blog90.fc2.com/?mode=m&no=27

60 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 01:44:25.43 ]
>>56-57
サンクス



61 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 02:14:47.49 ]
>>59
これかな。
ttp://newsgroups.derkeiler.com/Archive/Comp/comp.lang.scheme/2006-02/msg00002.html

62 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 19:59:11.83 ]
lispやscheme系で10年後にも開発が継続しているのはどれだろう?
gaucheは中の人が精力的に更新しているけど本人が倒れてしまったらどうなるかわからない
手堅いのはchickenやracketあたりか

63 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 20:22:42.28 ]
それはわからないよ。

Gauche は確かに shiro さんが今のところはほぼ全てを支配しているけど、
拡張パッケージを見ると Gauche の内部構造を良く理解していないと
実現できないものとかもあったりするので、そんな人たちならいつでも
開発を引き継げると思う。

ある程度大きな開発コミュニティがあるものも、それはそれで分岐したり
なんなりがありうるから現状の体制のまま 10 年後もあるかっていうと疑問だな。

統計的には、今まで長く続いているものはこれからも長く続く可能性が高いけど。

64 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 20:25:29.85 ]
gaucheはソースが綺麗だから引き継ぐ人が出易いと思う。
R7RSが決まればscheme処理系毎の差異も小さくなるだろうし、そんなに心配はしてない。
racketは独自路線すぎてついていけない。
型推論するR5RS compilerが欲しいなー(チラッ

R7RSといえばsyntax-caseだけは嫌なので、explicit renamingが採用されて欲しいな。R6RSがあんな美しくないミニ言語を入れた理由が分からない。

65 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 23:12:09.39 ]
r7rsていつ決まるの?

66 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 00:48:16.17 ]
>>64
> あんな美しくないミニ言語
解が見つからないまま publish に至っちゃった結果なんじゃないかなぁ。
Scheme マクロの出発点は「文脈によって意味が変わらないマクロを定義したい」
というところなんだろうけど、それがどうにも上手く行かない。

Common Lisp の symbol は名前を持つ object であるのに対し、
Scheme の symbol はちょっと変わった文字列でしかない。
つまり (eq? (string->symbol "foo") 'foo) => #t であることが保証されている。
ということは explicit renaming では
文脈によって意味が変わらないマクロを定義できない。
というわけで Scheme のマクロ変換の対象となるのは
マクロ変換時の情報を格納したオブジェクト(構文オブジェクト)とならざるを得ない。

で、マクロ変換時の情報って何よ?
ってなったときにどうにも合意できるものが無い。
合意できるものがないので
(datum->syntax identifier datum)
という identifier の中に隠れた(仕様書に無い)構文情報を
datum に付加できる手続きを仕様とすることでなんとなく合意された。

と推測している。

67 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 02:07:25.92 ]
個人的にはsyntactic closureが良いなー。レガシーマクロっぽくて。
explicit renamingでも良いけど、何度もrenameするの面倒な気がする。

d.hatena.ne.jp/leque/20080528/p1

68 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 03:06:13.27 ]
なんで scheme って、衛生的マクロに拘るの?
defmacro の方が、シンプルかつ必要最小限じゃん?

69 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 05:20:32.66 ]
defmacroはbrokenだから。どう使っても確実に動くというマクロが書けない。
運用上のルール (RnRSで定義されてるグローバル束縛をシャドウするローカル変数は作らない、とか)
で回避できなくはないけど、そこで妥協したらSchemeじゃない。

70 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 05:38:39.35 ]
やだ、かっこいい・・・



71 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 10:41:16.35 ]
ファミコンをCommon Lispでプログラミング。
developers.slashdot.org/story/12/02/07/0043241/hacking-the-nes-with-lisp

72 名前:68 mailto:sage [2012/02/08(水) 16:45:06.95 ]
>>69
ごめん、よく知らないんだけど、そもそもそういう思想なの?
刃物が危ないから規制する、みたいな感じに受け取れるんだけど…。
マクロの外側では普通に、グローバル束縛をシャドウするローカル変数、って(作っちゃだめだけど)作れるんだよね?
(define (let) 10) でめっちゃめちゃだよね?
なんで defmacro だけ目の敵に…。

73 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 17:05:59.38 ]
>>72
let を変な風に定義しなおしたとしても、何も変えてない let* とか letrec とかは今まで通り普通に動いてほしい
でも let* がマクロで let に展開されると、変な風に変えた新しい let を使うと、正しく動かなくなってしまう
自分が let を使うときは自前の定義した let を使いたいけど、 let* とかがマクロの内部で使ってる let は元々の let を使ってくれれば、素敵だと思わない?
そんな気持ち

74 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 17:10:55.65 ]
macroは式の変形なので、普通にやると展開時の文脈で評価されてしまう。
これに対してCommon Lispではgensymやパッケージ指定や命名規則で対応する。
schemeはLisp-1で名前空間が少ないのでCommon Lispと同じ対応は難しいし、直交しないので美しくない。
そこで定義時の文脈で評価する清潔なマクロを使用する。
R5RSのsyntax-rulesは純粋に定義時の文脈しか参照できない。
そこでR6RSに文脈を好き組み合わせられるsyntax-caseが入った。これは文脈を選べるので古典的マクロより強力。
ただsyntax-caseは通常のLispの文法に似ていないし、パターンマッチなど余計な仕事をしているので美しくない。
そこでexplicit renamingかsyntactic closureに変更しろという文句が出て来る。

75 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 17:14:28.23 ]
個人的な感想だと、explicit renaming=gensym類似、syntactic closure=closure類似、syntax-case=Lispじゃない。

76 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 17:20:18.70 ]
>>72
マクロじゃない、普通のライブラリは既にそういう分離が出来てるから。
自分のモジュールで (define car '(toyota prius)) したら、突然
標準ライブラリで内部でcarを読んでる関数が全部動かなくなる、なんてことはないよね。
(R6RS以降、もしくはR5RS+適切なモジュールシステムを使ってれば)。
マクロでもそれと同じことを保証したいけど、defmacroではできない、っていうこと。


77 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/02/08(水) 19:23:37.41 ]
>>68
小さければ良いというものではないよ。
プリミティブとしてふさわしいかどうかっていうことが重要で、
結果的にある程度小さいことが求められる。

defmacro がふさわしくない理由は↓の記事が詳しい。
blog.practical-scheme.net/shiro/20100425-scheme-macro

78 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 22:39:10.44 ]
>>72
> なんで defmacro だけ目の敵に…。
昔は手続きにも同じ問題があった(funarg問題)。
これに対してはレキシカルクロージャで一応解決した。
Scheme はマクロの方も解決しようとしている。
でもみんなが満足する解は今のところみつかってない。


79 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 22:46:26.14 ]
>>64
>型推論するR5RS compilerが欲しいなー(チラッ
今がんばっています

80 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 16:13:55.29 ]
>>79
ほうほう
楽しみにしています



81 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 04:44:52.24 ]
Schemeの衛生マクロではアナフォリックマクロみたいな意図的に変数捕捉するマクロは書けないと聞いた。
まあaifくらいしか使わないけど・・・

他にもdefmacroでしかできないようなことってある?

82 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 07:18:20.00 ]
アナフォリックマクロは無理矢理スコープをねじ曲げて作ってるのを何ヶ所かで見たことがある。
多分、ググれば出て来る。

83 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/02/11(土) 12:49:13.70 ]
>>81
かなり面倒くさいが出来ないわけではない。
d.hatena.ne.jp/leque/20100826/p1

84 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 13:37:23.08 ]
syntax-rulesでは面倒でもsyntax-caseなら普通に出来るじゃん。
R5RS処理系でも主要な物には外部変数捕捉が可能な健全なマクロシステムが入ってるよ。

85 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 13:40:57.53 ]
>>81
defstruct みたいに prefix 付き手続きを自動生成するとか。

86 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/02/11(土) 15:59:41.06 ]
R6RS のマクロと defmacro の差ってことで言えば defmacro でないと出来ないことってのはほとんど無いと思うなぁ。
むしろ defmacro には出来ないことがあると思う。

一応 >>81 が期待している回答が syntax-rules と defmacro の比較と仮定すると、 >>85 の他に
マクロ展開時の数値計算みたいなのとかも syntax-rules では無理ってことになるんじゃないかな。
例えば (plus 1 2) を 3 に展開するみたいなのは無理。
(define-syntax plus
(syntax-rules ()
((_ 1 2) 3)))
みたいな感じで全ての数値の組み合わせを網羅するとかいった方法が無いでもないが非現実的だわな。


87 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 16:25:57.01 ]
一段落目のあいまいな内容の感想文ワロタ

88 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/02/11(土) 17:08:26.17 ]
思想が違うものなので比較するのが難しい。

R6RS のマクロは defmacro に出来る大抵のことは出来るはずだけど、
展開時に使う関数は別のライブラリに分けなきゃならない制限があったりする。
(フェイズの分離がライブラリ単位。)
「defmacro は関連定義をひとつのパッケージにまとめることが出来る (が R6RS のマクロはそうではない)」
という点で能力の差と言えなくもないけど、定義したマクロを使う分には関係無いので単に記法の違いと言えなくもない。

一方で、 >>77 にあげたように「defmacro では完全に変数衝突を避けることは出来ない」というのは
定義したマクロを使う時にも注意を強いるという点で「defmacro には出来ないことがある」と考えた。

つまり、定義時の楽さや複雑さを置いといて、どれだけマクロの中に隠蔽できるか (マクロ使用時に見えないか)
で測ると >>86 という意見になるわけだけど、そうじゃない解釈もできるので曖昧な文章になってしもたという感じ。

89 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 00:28:30.09 ]
Creating Languages in Racket
queue.acm.org/detail.cfm?id=2068896
特別な内容という訳ではないと思うけど、queueだけではなく
John McCarthyが表紙のacm会誌('12/01)にも転載されてた。

90 名前:デフォルトの名無しさん mailto:sage [2012/02/14(火) 17:54:07.78 ]
RacketのGUIをちょっとやってみたけど、
message%のlabelが全部表示されない
だめだな



91 名前:デフォルトの名無しさん mailto:sage [2012/02/14(火) 19:05:01.69 ]
ふと気になったんだけど、schemeって代数幾何でいうスキームと何か関係あるの?

92 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/02/14(火) 19:14:01.90 ]
>>91
無い。

93 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/02/14(火) 19:16:47.01 ]
Scheme の名前の由来はこの記事が詳しい。
www010.upp.so-net.ne.jp/okshirai/scheme-20070402222203.txt

94 名前:デフォルトの名無しさん mailto:sage [2012/02/14(火) 19:37:41.97 ]
>>93
ありがとう
勉強になった

95 名前:デフォルトの名無しさん mailto:sage [2012/02/14(火) 19:57:47.92 ]
新宿ジュンク堂が閉店するみたいだ。残念。
Lisp関連書籍やものまね鳥なんか買うことが出来てお世話になった。

96 名前:デフォルトの名無しさん mailto:sage [2012/02/14(火) 22:05:27.83 ]
ぇえー残念
って、そういえば、三越自体がなくなるせいか
まぁ仕方ないね

97 名前:デフォルトの名無しさん mailto:sage [2012/02/14(火) 22:37:18.96 ]
ジュンク堂自体はおなじ規模でどんどん出店してるから、また新宿に出来るかもね。

98 名前:デフォルトの名無しさん mailto:sage [2012/02/14(火) 23:31:00.57 ]
後釜のビックが書籍のフロアを頑張ってくれると有難いんだが。

99 名前:デフォルトの名無しさん mailto:sage [2012/02/15(水) 01:47:04.54 ]
新宿三丁目のあたりで良いからまた店出して欲しいな。

100 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 03:04:19.85 ]
新宿は紀伊国屋本店があるから無理じゃね?
それにしても紀伊国屋の3階はLisp関連書だけ外れの方に追いやられてるのは何故だ・・・



101 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 08:01:16.78 ]
行ったことないから判らんのだが
コンピューター書のコーナーが中央にあって、そこと別にLispコーナーが端にあるのか?

102 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 08:34:03.94 ]
本店があって、(行政区画上は渋谷区だが)新宿南店もあるもんな。

103 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 00:22:46.67 ]
>>101
一応コンピュータのコーナーだが概論的なコーナーだし
空間的に、ん?ここもコンピュータ書のコーナーなのかな?
というような微妙な位置にある。

104 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 22:48:15.88 ]
JVM版CLのABCLも1.0.0が出てたのか・・・
abcl-dev.blogspot.com/2012/01/abcl-101-released.html
abcl-dev.blogspot.com/2012/01/closing-in-on-closer-mop-in-abcl-110.html
地道にやってるのかな・・・

105 名前:デフォルトの名無しさん [2012/02/28(火) 23:26:45.58 ]
WEB+DBの最新号、関数型言語入門を山本和彦が書いてるのを立ち読みして来た
けど、LISPに関する文章が悲しくて泣けた
家に帰ってリスト遊び窓から投げ捨てた

106 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 23:42:50.17 ]
>>105
どんな文章なんだろう
読んでみるよ

107 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 05:52:25.13 ]
論点の前半は、下記のclojureの説明とおなじかんじだった。(デフォルトで不変データ構造から組み立てた言語が関数型言語とする)
www.geidai.ac.jp/~marui/clojure/index.html
https://sites.google.com/site/clojurejapanesedocumentation/home/reference
lisp系でそこに名前が上がっていたのは、clojureだけで、racketさんは認知されていなかった。

もう一点は、コンパイル時の型チェックは重要ということで、型推論からパターンマッチングあたりの積み上げやすさを説いていた。
(値のテストだけで済む)

なので、定義では関数型言語は不変データ構造だけど、MLレベルのコンパイル時チェック(テストを値での分岐チェックに落とし込める)がないとダメじゃないかという内容でもあった。

108 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 06:02:06.45 ]
S式(単一シンタックス)やマクロといったlispの特徴は二の次というか、あまり興味なさそう。
(マクロはAST操作やテンプレートがありますが)

前半でいえば、最近だと、逆に値の変更をプログラマーが管理してチューニングする方がいいと、clojureからclに流れる人もいるし、
haskellも性能出すのにチューンされた通常のデータ構造は管理して使ってるみたいだけど。
(ただclojureやscalaの影響で不変データ構造の高速化にチャレンジするライブラリ制作者も増えた気がする)

後半の型推論といえば、shenが(ry

109 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 09:47:21.10 ]
>>108
Clojureもjavaのコードを動的コンパイルしてreloadできれば値の変更を伴うコード書くのもたやすいんだがなぁ
CLとくらべちゃうとどもならんけど

110 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 10:14:13.14 ]
そんな凝った事しなくてもJavaのデータ構造使えばいいじゃないか
配列も使える



111 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 11:52:59.90 ]
関数型言語入門でLisp大きく取り上げてたら
それこそ頭おかしい。

112 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 12:01:59.01 ]
関数型の利点として副作用がない事をあげてしまうと、constやimmutableが基本ですからと返される気がするのだけどな。
高階関数やマクロや型推論などのコードがスッキリ書ける技法を押した方が良いと思うのだけど。

113 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 12:04:56.93 ]
マクロ、型推論、パターンマッチ渡しは
関数型言語と独立した概念。

114 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 13:36:21.87 ]
独立した概念だろうと、副作用がない事は手続型への優位にはならないよ。
constは常識ですから、で終わり。高階関数でさえ取り入れられてきて、優位としては怪しい。
やはり対話環境も含めた言語全体の機能を押した方が良いと思う。

115 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 14:36:51.26 ]
参照透明性についてちゃんと勉強してから偉そうなこと言えよwwwwwwww

116 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 15:09:43.56 ]
なにそれ?
説明してもらえるかしら?

117 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 15:10:24.83 ]
最低限でもCTMCPとか知ってれば、「副作用が無いのが優位」とまでは考えないだろうな。

「副作用(内部状態)を活用したプログラミング」「副作用に依存しないプログラミング」などがある。
副作用に依存した言語しか知らないプログラマーが、余計な副作用に悩まされるというのは判る。
大抵は>>114の、constなどで解決出来るから、ネイティブCでは難しいこと(DSLを作るとか)
が必要になったらLispなどが選択肢に入る、ってだけだと思う。

118 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 15:20:05.46 ]
pc.watch.impress.co.jp/docs/news/20120228_515140.html
この FAST LISPの説明がよくわからないんですが
「ビットスライスプロセッサ上に、マイクロプログラム化した」というのは
どういうことでしょう?

119 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 15:39:13.99 ]
>>118
「ビットスライスプロセッサ」、「マイクロプログラム化」の意味ならWikipediaあたりで見てもらうとして、
意義は、ハードレベルでLisp対応マシンを作製した、という事。
現在の個人向けPCのCPUは、どちらかと言うとC言語対応。

C言語対応CPU + Cソース + Cコンパイラ
→ Lispコンパイラ + Lisp ソース
→ C言語対応CPU用実行ファイル
→ C言語対応CPUで実行、よりも

Lisp対応CPU + Lispソース
→ Lisp対応CPU用実行ファイル
→ Lisp対応CPUで実行
の方が速度的に有利だし、Lispの内部構造改善も容易。

120 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 17:34:21.00 ]
ttp://museum.ipsj.or.jp/computer/other/0001.html
ここに参照すべき文献が出てる



121 名前: ◆QZaw55cn4c mailto:sage [2012/02/29(水) 20:25:51.28 ]
>>119
>C言語対応CPU
そんなものがあるのか?

122 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 20:47:12.95 ]
Cコンパイラを意識しながら進化してきてるって意味でしょ。

123 名前: ◆QZaw55cn4c mailto:sage [2012/02/29(水) 21:33:46.93 ]
>>122
そんな事実はあるのか?具体例をひとつ。

124 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 21:38:31.08 ]
どっか他所でも誰かに同じ議論吹っかけてたね。

125 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/02/29(水) 23:34:11.55 ]
インテルアーキテクチャでは命令をμopに分解してCPU内部で最適化したりもするらしいね。
最適化って処理に時間がかかるよくあるパターンを置換える処理だけど、
「よくあるパターン」ってやっぱ言語によると思うんだよな。
インテルはあまり詳細な資料は公表してないけど、少なからず言語を意識せざるを得ないはずではある。

126 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 23:51:50.05 ]
らしい、とか、思う、とか、はず、とか言われても……

127 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 23:56:11.75 ]
そろそろスレチ。

128 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 01:05:40.84 ]
>>123
x86: enter命令やleave命令
SPARC: レジスタウィンドウ
MIPS: 大量のレジスタと少ないアドレッシングモード
Atmel AVR: (PIC あたりと比べて)Cで書きやすいように設計された
C だけでなく Pascal や FORTRAN あたりも視野に入ってるんだろうけど。

ARMv8 でタグ付きポインタ入らないかなと期待してるんだけど無理だろうな。

129 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 01:16:43.05 ]
Cの実装でも用いられるスタックを使った環境フレームモデルは
データの時間的局所性を自然に表現することになるから、キャッシュが効きやすいはず
原理的にCPUとは相性がいいんじゃないの?

130 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 04:38:06.51 ]
山本和彦の文章立ち読みしてきたけど、まあHaskell宣伝の文章だからそっちのを
持ち上げるのは仕方ないとして、LISPでやって来たことは頃は何も分かってなかった
みたいに否定的に思い出しているのがちょっとショッキングだったなあ。
俺もHaskellやろうかな?



131 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 07:31:42.23 ]
心が揺れてるなら自分の答えを得る為にやってみてもいいんじゃね?
「俺も全然分かってなかったわ……」と結論付けるにせよ
「あいつがLisp全然分かってなかったわ……」と結論付けるにせよ

132 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 14:05:17.12 ]
読んで疑問に思ったんだけど、
何でlispの頃はそもそも理解できなかったんだろう?
理解できてもいいと思うんだけど。
lispだから理解できなかったというよりも
lisp経験を積んだから最終的に理解できたんじゃないかな

133 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 14:15:01.27 ]
Lispに潜在的能力があるとしても、やっぱり言語仕様にないと利用者に伝わらないんじゃない?

Cしか使ったことない人にGObjectを説明してもたぶんよく分からないだろうけど
C++を一度経由させてみたらオブジェクト指向について理解が深まる……みたいな感じで
ほかの言語に触れたからこそ目が覚めた、でも元々使ってた言語でも同じようなことはできた
ってことはあるかもしれない

134 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 14:27:56.13 ]
うん、lispやったから理解できないってのは
何か意図があるのかないのか
この手の文章によくあるセンスの悪い誇張だろう

135 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 14:54:00.62 ]
ある程度の宣伝口はしかたないでしょ。
Haskelは型付けの意識が強すぎて、書きながら考えるのがやりにくいのがイヤ。優等生向け言語。遅延評価もマイナス。

136 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 15:26:55.07 ]
>>135
>遅延評価もマイナス。

メリットを上回るデメリットって何?

137 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 16:15:27.97 ]
「人は副作用から離れては生きられないのよ」ってことじゃねぇの?

多分それに対する返しは「副作用に魂を縛られた人々よ」なんじゃないかと思うが。

138 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 16:19:32.71 ]
>>136
あくまでも個人的な感想。言語の機能は目的に応じた選択だから良い悪いの評価は難しい。だからこそLispは言語が作れる言語になってる。
静的型の利点に性能をあげやすい点があるけど、デフォルトが遅延評価だとやりにくい。

139 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 16:37:25.31 ]
もともとelisp以外にlisp書いてない人なんじゃないの?
elispは開発環境として、プロトタイプ志向がすごく強くて、
コンパイラの性能も悪いから、ちょっと特殊だしね。

140 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 16:40:19.88 ]
遅延評価は結構厄介だぞ
性能評価とか人が直感的に理解できる範疇をはるかに超えてる



141 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 16:59:49.49 ]
でもまあMew作ったほどの人があれだけはっきりLISPにネガティブなこと書くという
のはそれなりに影響を与えそうな気はする。


142 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/03/01(木) 17:19:02.05 ]
俺らが日本語を話すときにいちいち文法を考えたりしないだろ。
公式文書とか入り組んだ理屈を書くときにちょっと確かめたりするくらいだ。
合理的な理由があったとしても、メンタルモデルとかけ離れた言語は使い難いよ。

Lisp は言語の方を自分に (あるいは目的に) 合わせていける余地があるところが良い。
だけど、自分の裁量が大きいっていうのは自分の能力次第でグダグダにもなるってことでもあるわな。

Haskell は知識を体系的に表すことが強要される気がするけど、
それが使い難いと感じるのは、人の脳味噌が実際のところそんなに体系的に考えるのには向いてないってことなんじゃないかな。

143 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 18:01:53.72 ]
>>137
副作用が良くない事のように捉える人が少なくないのに違和感あり。

144 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 18:09:54.90 ]
>>143の文章に違和感を覚える

145 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 18:22:35.35 ]
そこは違和感ありだろと違和感あり

146 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 18:28:50.59 ]
イスラム名のように違和感なく聞こえないこともない

147 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 18:32:07.85 ]
でも、副作用については、厳密に副作用を禁止するより
むしろ禁止しないほうがいいというのが、大多数の言語の主張だろ

148 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 18:39:58.90 ]
たとえば薬とかの副作用は、基本、ないほうがいいものだから、手続き型ないし
命令型(プロシージャルorインペラティブ)のそれを「副作用」と呼ぶのには
問題があると言えばある。今更「仮想」とかと同じでどうにもなりそうにないが。

149 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 18:45:15.14 ]
説教つうと、基本悪い事した時に正座させられた上でこれでもかと聴かされるアレだから、
宗教家のそれを「説教」と呼ぶのには問題があると言えばある。
のか?

150 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 18:46:02.62 ]
代入なんか言ってみればmain effectだしな。



151 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 18:46:15.60 ]
はっきりとコードの領域を副作用と純粋に分けられるかじゃないの
haskellはいい線行ってるとおもうけど

152 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 19:10:15.74 ]
副作用を目の敵にしてるんじゃなくて
副作用のある部分もない部分もプログラムの正しさを証明できればいいなっ
という試みだろ

153 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 19:17:23.29 ]
> 合理的な理由があったとしても、メンタルモデルとかけ離れた言語は使い難いよ。

もっともな話だけど、そのメンタルモデルとやらが本質を捉えていたかどうかだな。
継続みたいに慣れの問題にすぎないんじゃないかと思うよ

154 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 23:29:10.52 ]
>>142
Haskellは知識を「体系的」と言うより数式と同じように「宣言的」に表します。
人の脳味噌にとっても宣言的に考える方が手続的に考えるより向いている場合があります。
宣言的記述である方程式を手続き的に記述すると鶴亀算になりますが、
方程式の方が鶴亀算よりずっとわかりやすいです。

>>151
はっきりとコードを手続的記述と宣言的記述に分けられるか、と言い換える事もできます。
Haskellは、その点では理想に近いですね。

155 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 00:32:59.87 ]
>>140
だよね。

結局性能が落ちるコードを避けるために神経を使わないといけないなら、
eagerに対する利点が相殺されてるんじゃないのか、って思うわ。
個人的な印象としては、必要なときだけlazyにできれば十分。
その方が、必要なときだけeagerにするよりはずっと分かりやすい。

156 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 07:55:50.40 ]
lazyは下手にボトムを回避しちゃうからねぇ

157 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 09:07:55.27 ]
だからLazyじゃないMLを使ってればいいだろが。

なんでLispスレでHaskellヘイトをせにゃならんのだ。

158 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 10:04:37.29 ]
ClojureもRacketもデフォルトlazyではないはず。

159 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 10:07:25.49 ]
Racketさんは四次元ポケット持ってるのか?
docs.racket-lang.org/lazy/
docs.racket-lang.org/ts-guide/

160 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 00:12:35.60 ]
>>157
既に条件に合うLispって言語を使ってるのにML使えとか言われても。
それに、OOPを批判することとJavaを批判することが同じでないように、
Haskellを攻撃してるわけじゃないのは理解して欲しいところ。

あと、遅延でHaskellばっかり引き合いに出すと、多分Cleanさんが泣く。



161 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 02:17:20.62 ]
WEB+DBマガジン立ち読みしたけど
関数型言語の定義を静的単一代入であること
とかにするのはいくら何でもおかしいだろ

もちろん、関数型言語の定義なんて存在しないことは
わかっているつもりだけどさ

162 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 02:23:26.60 ]
はぁ?

163 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 07:57:33.75 ]
LispがいいならLisp使ってればいいじゃない。
静的型やらなんやらと、遅延評価は抱き合わせじゃない、というそんだけの話。

164 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 15:25:55.02 ]
一応フォローしとくけど、最初から遅延評価が標準の環境の話しかしてないし、
Haskellや静的型の話をしてるのは別の人。勘違いで過剰に反応するのは勘弁して。

165 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 16:19:02.99 ]
静的単一代入なんて言語あるのか?

166 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 16:29:24.95 ]
HaskellerがLispを否定的に評価したので、HaskellよりLispが良いと思う理由を書いただけだけど。

167 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 17:10:19.84 ]
>>165 SSAの訳だけど、あまりプログラミング言語の分類では使わない表現だね。
関数型言語の中間表現でよく使われる形式と等価ではあるんだが。

168 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 18:16:18.87 ]
手続き型言語のIRにも時々登場するな
LLVM IRもSSAだし、Google V8のJITCが使うのもSSAなはず

169 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 18:44:49.39 ]
関数型言語のほうはCPSね。

170 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 21:19:44.93 ]
>>165
Haskellerがそうなんじゃないの
SSA(静的単一代入)は中間表現に対して使われるものとwikiepediaに書いてあったけど

ちなみに、C/C++とかだって最適化の途中でSSA形式の中間表現に変換される




171 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 21:20:23.15 ]
>>170
×Haskeller
○Haskell

172 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 02:28:26.54 ]
>>168
むしろ現代の最適化コンパイラでは
デファクトスタンダードの中間表現

173 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 09:36:41.19 ]
(関数型)プログラミング言語の性質としては「単一代入性」と言う。

174 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 20:09:43.95 ]
Haskellってすごいすごい言われているけど
現実では大した役に立ってないよね
Haskellなんかわからないけど凄そうみたいな
印象操作に成功しているだけだろ

175 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 20:18:25.14 ]
             |
〜〜〜〜〜〜〜〜|〜〜〜〜〜〜〜〜〜〜
   >( c´_ゝ`)  |
            |
>( c´_ゝ`)     J
     >( c´_ゝ`)



             |
〜〜〜〜〜〜〜〜|〜〜〜〜〜〜〜〜〜〜
             |     >( c´,_ゝ`)
             |
             J   >( c´,_ゝ`)
                    >( c´,_ゝ`)


176 名前:デフォルトの名無しさん [2012/03/08(木) 21:29:15.66 ]
Haskellならではの便利なプログラム手法とか教えてくれないか?
当方Scheme使ってるが。

177 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 21:55:54.71 ]
「う〜〜Haskell Haskell」
  今Haskellならではの便利プログラムを求めて全力疾走している僕は
  予備校に通う ごく一般的な男の子
 強いて違うところをあげるとすれば
   Schemeを使ってるってとこかナー
     名前は道下正樹

178 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 21:58:07.33 ]
やめないか

179 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 22:50:06.22 ]
λアッー!!

180 名前:デフォルトの名無しさん mailto:sage [2012/03/08(木) 23:10:20.44 ]
Λーッ!!



181 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 04:07:33.35 ]
Haskell使っているだけで
自分は優れているなどと勘違いしてそう

182 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 04:08:38.79 ]
Haskellは型安全で爆速だお

183 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 04:44:31.02 ]
でも、実際使ったら彼女はできるし

184 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 09:21:33.35 ]
>>176 packratパーザ

185 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 09:41:50.75 ]
関数言語信者って選民思想の人多すぎだよね
Lips界隈でもポール・グレハムとかさ

186 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 09:51:12.60 ]
でも実際、PHPとかJavaとか使っていたら
その時点で雑魚確定だろ

187 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 09:57:47.96 ]
使っている言語でプログラマの能力をを判断すべきじゃないよ

188 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 10:02:11.32 ]
>>186
何故?

189 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 10:28:31.63 ]
関数型言語の信者は中二ってことでいいけどさ、
俺が分からないからお前も分かっちゃ駄目ってのは日教組強すぎだろ

190 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 10:37:28.69 ]
選民思想というより、言語の選定を真面目にしない人を馬鹿にするって感じだと思うよ。
Javaとか使ってても、きっちり技術的な観点からバランス感覚のある選択をしてれば、
無意味に馬鹿にされたりはしない。



191 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 10:46:00.40 ]
Clojure使ってるんでJavaのコードも書くよ。

192 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 10:50:38.83 ]
プロジェクトならJava使うほうが、lispなどの関数型言語使うより
いい利点たくさん挙げられるけど

193 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 10:55:07.67 ]
>>184
packrat parserは言語に依存する技術じゃないと思う。
Haskell以外の言語での実装も溢れてるし。

194 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 10:56:35.64 ]
だけど、遅延評価使ってエレガントに書けるじゃん

195 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 11:03:11.45 ]
そういう話なら、遅延評価を前提にしたコードが書けるのがHaskellならではなのであって、
流石に語弊あり過ぎ。

あと、Haskellならではでもないというか、Cleanでも同じことできないか?

196 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 11:09:38.02 ]
MirandaでもCleanでもなくてHaskellならでは、って条件は流石に厳しくないか?

197 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 11:13:19.83 ]
遅延評価なんて大昔から知られていた手法なのに
なんで一般の言語で使われないのか?

Haskell布教者の主張するような利点だけじゃなくて
欠点も多いからだろ

198 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 11:13:41.50 ]
Miranda, Cleanは演算子ユーザ定義が無理じゃなかったかな。

199 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 11:14:28.71 ]
>>197
一応、遅延評価デザインパターンってのはあります。
言語が直接サポートするのが少ないだけで。

200 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 11:19:22.62 ]
>>199
それは分かるけどさ、言語が直接サポートしないのが一般的なのは
遅延評価と普通の評価のトレードオフを考えた上だろ



201 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 11:29:37.02 ]
>>197 の主張はたとえばガベージコレクションにもそのままあてはまるよな。
Java が流行ったとたん、パッタリと消えたタイプのw

202 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 11:31:03.42 ]
>>196
それは確かにそうかもしれない。ちょっと過敏な反応だったようで申し訳ない。
最近、何かにつけてHaskellが引き合いに出されることが多くて、ささくれだってたみたいだ。

203 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 11:32:29.66 ]
>>200
そもそも遅延評価という選択肢を考慮すらせずに設計された言語も多いんじゃない

204 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 11:41:13.17 ]
>>203
言語設計者がそんなに馬鹿な連中だとは思わないけど
遅延評価なんて大学で情報関係の教育を受けた人間なら知ってることだろ

205 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 11:41:36.45 ]
>>201
遅延評価がこれから流行る可能性はゼロだけど

206 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 11:51:13.09 ]
ほら、こういう風に図に乗る奴がすぐ出てくるんだよ

207 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 12:05:46.45 ]
>>204
今どきの、情報教育ならね。
今現在主流の言語はほとんど、二世代三世代前の連中が設計したものがベースってことを忘れちゃいかんよ。

208 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 12:08:35.04 ]
JavaとRubyは?
それ以外の新しい言語でも遅延評価は採用されてない
欠点も大きいからね

209 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 12:12:20.41 ]
いつまでスレタイも見ずに暴れるつもりだこのバカ?

210 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 12:15:27.59 ]
だったらスルーしろよ



211 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 12:18:42.10 ]
その「だったら」がよくわからない

212 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 12:19:03.04 ]
新しい言語で遅延評価が採用されてないって、ガチで言ってるならお前は帰れw


213 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 12:22:26.05 ]
>>208
欠点があることは誰も否定してない。
が、採用言語が少ないことは、欠点だけが理由じゃなく、考慮されないことが多かったからって話をしている。
もちろんJavaが先行評価なのは歴史的経緯なんだろうし、RubyについてはMatz本人に聞かないと分からんけど
そういう個々の話をしてるわけじゃないだろ...

214 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 12:39:08.44 ]
>>213
欠点が理由だよ
考慮されないのは欠点が大きすぎるから

215 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 12:46:30.09 ]
toro.2ch.net/test/read.cgi/tech/1330429547/l50
おら、ここで存分にやれや。
まずはおまえの脳内で断定して断言するだけじゃなくて、
計算機科学的な理由をちゃんと挙げるところからなw

216 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 12:47:17.51 ]
断定して断言
こういう微妙な悪文に気がつかない人って頭悪そう

217 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 12:53:24.24 ]
欠点が欠点が、と喚くだけで、全く科学的定量的根拠が出せない奴もな

218 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 12:54:29.56 ]
Common Lispでherokuらしい。
ja.reddit.com/r/lisp/comments/qnv47/common_lisp_on_heroku/
Schemeでこういうのないの?

219 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 12:55:24.51 ]
sicpから

(define (gcd a b)
 (if (= b 0)
   a
   (gcd b (remainder a b))))

この関数を(gcd 206 40)で実行する

遅延評価と普通の評価でそれぞれ何回remainderを呼び出すのか?

答えは、遅延評価だと18回、普通の評価だと4回
遅延評価にどれだけ欠点があるのかよく示している例

220 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 12:56:37.21 ]
>>219
問題はExercise 1.20
ぐぐれば問題も答えも出てくる
英語だけど



221 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 12:57:11.72 ]
>>214
遅延評価に考慮すらされないほどの欠点があるの? どんな?
最近の情報工学を学んだ人間なら、遅延評価は普通に考慮に入れると思うけど
それほどの欠点があるとは知らなかったよ

222 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 13:00:59.99 ]
マクロなんて大昔から知られていた手法なのに
なんで一般の言語で使われないのか?

S式なんて大昔から知られていた手法なのに
なんで一般の言語で使われないのか?

Lisp布教者の主張するような利点だけじゃなくて
欠点も多いからだろ


223 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 13:11:09.37 ]
マクロは使われてる。S式じゃないとそれほど便利じゃないけど。
S式が一般の言語で使われないのは、S式を使いたいやつは皆Lispを使うから。

Lispに欠点が多いのは事実だけど、
マクロやS式が普及しないのは欠点とかそういう次元の話じゃない。

224 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 13:21:47.40 ]
Lisp人口=S式使いたい人数か
少ないな

225 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 13:27:21.21 ]
>>224
データ構造の表現だけなら、JSONやXMLみたいな
もう少し便利な品があるからね

226 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 13:54:08.21 ]
エディタのサポートがないと書きづらい事も普及を妨げていたと思う。
最近は他にもそういう言語あるけど。

227 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 14:18:24.16 ]
世間のビジネスの殆どは単純な事務処理だから、マクロやS式無しでも出来るだけの事。

228 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 14:29:38.38 ]
単純な事務処理以外の分野でも
殆ど使われてないのだが

229 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/03/09(金) 14:33:07.71 ]
>>223
> S式が一般の言語で使われない

S式が使われた言語は LISP と呼ばれてしまうので LISP でないS式言語が存在し難いんだと思う。

230 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 14:35:59.17 ]
>>229
汎用の言語でLispと言ったらCommonLispとSchemeとClojureくらいしか知らないんだが



231 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 14:45:25.16 ]
そこに収斂するまでどれだけの血と汗と紆余曲折があったと思ってんだ!!

232 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 15:02:28.87 ]
>>231
汗はなんとなく分かるけど、血と紆余曲折の具体的事例が思い浮かばない

233 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 15:07:20.62 ]
Lispの方言の数を舐めるなよ。

234 名前:デフォルトの名無しさん [2012/03/09(金) 15:11:04.31 ]
Cygwin-1.7.8でGuile-2.0.5のビルドが通らない。libffiのテストが通らない。

235 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 15:21:07.33 ]
Allegro Common Lisp (ACL) の試用版を使っています
(list "*" '(2 3 4) '(a b) "!" '(8 9 0))
こういう文字列とリストからなるリストをもとに
*2a!8
*2a!9
*2a!0
*2b!8
*2b!9
*2b!0
*3a!8
...
と続くものを出力したいです(文字列とリストは0回以上ランダムに表れます)
リストについては命令型言語でいうところの
for (...)
 for (...)
のような処理をすることになりそうですが
どこから手をつければよいかわかりません
おそらくmapcarを使ってリストを作り直す必要があります?
どうすればよいですか

236 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 15:28:42.47 ]
ここschemeスレなんだけど

237 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 15:30:48.13 ]
じゃschemeではどうやるか教えてください。

238 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 15:33:18.46 ]
頑張れば書けるだろ

239 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/03/09(金) 15:33:25.27 ]
>>235
Common Lisp の闇である loop と format が大活躍する場面だな!!

240 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 15:44:11.86 ]
Lisp族の総合スレだろ。



241 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/03/09(金) 15:50:15.41 ]
>>235
>>237
こんな感じかな。

(define (power-display lst)
(let loop ((acc '()) (next lst))
(cond ((null? next)
(for-each display (reverse acc))
(newline))
((list? (car next))
(for-each (lambda(x) (loop (cons x acc) (cdr next))) (car next)))
(else (loop (cons (car next) acc) (cdr next))))))

(power-display
(list "*" '(2 3 4) '(a b) "!" '(8 9 0)))

242 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 15:51:56.19 ]
とりあえずloop系のゴリ押しか、再帰で書けそうだけど、
リスト処理だからmap系の上手い手がありそうな気がするな。

243 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 16:06:21.13 ]
プログラム書いてくれるプログラムまだー

244 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 16:47:03.23 ]
コンピュータが人間に合わせてくれるのではなく、コンピュータに合わせて人間の頭を
作り変えろ、というのがLISPの思想。

245 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 17:12:13.22 ]
1960年代ではその考えは間違い。

246 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 19:01:04.41 ]
lispのコードが読みやすいのはコード量が少なくなるから
少なくなる要因は1つの行に複数の関数を押し込めるから
同様のことは、オブジェクト指向のチェーンメソッドでやっている

プログラマの目の動きを考えたとき、その視点は左から右、上から下に動くのが普通。
だから、チェーンメソッドはポーランド記法よりも理にかなっている。
けれども、チェーンメソッドである以上はオブジェクトでなければならない。

行数を短くし、1行に複数の関数を押し込めて自然な流れで読むためには、
逆ポーランド記法が理にかなっているといえる


247 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 19:28:34.82 ]
>lispのコードが読みやすい
要出典

248 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 19:32:02.72 ]
よって、逆ポーランド記法で書けるschemeが最も自然な流れで読めるという結論に至ったわけだが

249 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 19:34:38.31 ]
>>247
慣れの問題なだけだからなー
XMLのタグよりよっぽど楽だし、構文の覚えやすさならLispの右に出るのってFrothくらいじゃないのか?


250 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 19:37:59.63 ]
一語ずつ順番に読むならそうかもしれんが
いくつか語句を先読みしてまとめて解釈するからな
逆ポーランド記法が読みやすいなら数学なんかもそうなっているだろうし



251 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 20:05:04.34 ]
(set! bar (fn1 (fn2 (fn3 (fn4 "foo"))))) <- "foo"まで読んでから視点が折り返し
bar = fn1(fn2(fn3(fn4("foo"))) <- 上に同じ
bar = "foo".fn4.fn3.fn2.fn1 <- 左から右へ一発。オブジェクトでないとダメ
"foo" fn4 fn3 fn2 fn1 bar! <- プリミティブな型から自然に変換できる!
vimのマクロがforthで書かれていたなら、エディタ戦争はまだまだ続いていたと思うね

252 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 20:06:55.12 ]
>>248
schemeって逆ポーランド記法なの?
1 2 +
みたいな記述するん?


253 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 20:19:34.65 ]
だからさー、Lispでうまく分業できる方法確立したら、
世界制覇、いや銀河を制覇出来るって何度言ったら…


初めてでした。調子乗ってすみません。

254 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 21:45:16.32 ]
引数と関数のチェーンって逆の方向に伸びるから
逆ポーランドだと引数が不恰好になるよ
あとリストのcarが関数の名前だとほんの少しだけマシンにやさしい

255 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 22:50:31.97 ]
ちょっと何言ってるかわからないですね

256 名前:デフォルトの名無しさん mailto:sage [2012/03/09(金) 23:30:53.68 ]
>>255
そっか、わかりづらくてごめん
でもほんとにたいした内容じゃないからスルーして

257 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 01:05:41.88 ]
>>252
逆ポーランド記法な scheme があったら、って話だと思う

つまり、
 (5 (3 4 +) *)
こういうことだよね?
案外いいかもしれない

さらに Forth のように + や * が関数だと分かってると、上のは 5 3 4 + * って書けるだろうけど
シンボル a, b, c, d に関数や数値が束縛されているとき
a b c d はどこが引数でどこが関数なのか、普通の人間には理解できないかもしれん…
メソッドチェーンは上手く表現できるんだろうけど、こんな表現を使いこなせるのは、なるほど Jedi だな
さらにもし多値を返せて、それがスタックに複数の値として残ったりなんてしたら、とてもとても…

258 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 01:06:49.20 ]
>>241
ありがとうございます

259 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 02:06:16.88 ]
>>257
その書き方だとマクロが悲惨なことにならない?
(((a 0))
 ('foo 'bar (a 1 <) if)
 let)


260 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 02:17:06.93 ]
確かに… マクロとの相性最悪ですね
だから Forth は、Lisp的なマクロじゃないんだろうな
改めてS式万能だなぁ。まさしく、Lispは「発見」されたんですね



261 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 03:02:24.24 ]
映画コンタクトで解読できたのは巨大な括弧だった

262 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 03:06:15.29 ]
>>258
時既に遅かったっぽいけど、自分も書いてみた。
>>241のCommon Lisp版も付けたので出遅れたのは見逃して欲しい。

paste.lisp.org/display/128244

263 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 05:39:21.55 ]
>>259-260
マクロと相性が悪いというよりツリーと相性が悪いのでは?
LispはツリーであるS式が基本なので
逆ポーランド記法は採用できないと思います。

線形リスト:
 ポーランド記法でまあまあ読みやすい。
 逆ポーランド記法でとても読みやすい。
ツリー:
 ポーランド記法でだいぶ読みにくい。インデントで改善できる。
 逆ポーランド記法でかなり読みにくい。
グラフ:
 ポーランド記法でとても読みにくい。
 逆ポーランド記法でとても読みにくい。

264 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 07:51:38.54 ]
言いたいことは分かる気がするけど「だいぶ」と「とても」と「かなり」の順序が分からん
あと上のLispと関係ないフレーム合戦でみんな申し合わせたようにPerl6を黙殺してて泣ける

265 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 09:46:03.03 ]
>>263
グラフ同士でも読みやすさに差があるからこうですね。

<<読みやすさランキング>>
線形リスト + 逆ポーランド記法
 ---- 壁0. 実行順の壁 ----
線形リスト + ポーランド記法
 ---- 壁1. 一直線の壁 ----
========<< 越えられない壁 >>========
ツリー + ポーランド記法
 ---- 壁2. 概要から詳細への壁 ----
ツリー + 逆ポーランド記法
 ---- 壁3. 階層構造の壁 ----
========<< 越えられない壁 >>========
グラフ + 逆ポーランド記法
 ---- 壁4. 実行順の壁 ----
グラフ + ポーランド記法

266 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 10:52:36.29 ]
グラフって何の話?

あと、完全に後置にさせると Forth とかでも悲惨になる。

THEN
 FOO @
ELSE
 BAR @
COND
 1 2 + 3 4 + <
IF

Lisp系言語で最初の要素がオペレータになっているのは、
compile の前に macro expansion があるから。
macro expansion のためには完全に前置か完全に後置かにしないと都合が悪い。

FORTHで完全な後置にしなくて良いのは immediate word があるから。

267 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 14:23:45.93 ]
>>262
>エターナルフォースnreverseすると死ぬ
これは一体…

268 名前:デフォルトの名無しさん [2012/03/10(土) 17:27:10.53 ]
www

269 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 17:42:55.78 ]
262ではないがlisperなら使えるのでは?
エターナルフォースブリザードとは - はてなキーワード d.hatena.ne.jp/keyword/%A5%A8%A5%BF%A1%BC%A5%CA%A5%EB%A5%D5%A5%A9%A1%BC%A5%B9%A5%D6%A5%EA%A5%B6%A1%BC%A5%C9

270 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 17:44:07.61 ]
>>266
> macro expansion のためには完全に前置か完全に後置かにしないと都合が悪い。

「都合が悪い」ってのは、評価時にさらに構文解析が必要になるのが問題になるってこと?
それってmacro expansionに限った話か?



271 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 18:56:43.36 ]
>エターナルフォースブリザード
松本零士御大の漫画かと思いました

272 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 21:47:59.76 ]
>>266
グラフ理論のグラフじゃね?
ツリーは循環のないグラフと言い換えられる(グラフはツリーを含む)

273 名前:266 mailto:sage [2012/03/10(土) 22:25:57.43 ]
>>270
macro expansion に限った話ではないです。例として挙げただけ。
「都合が悪い」のは、
例えば「第二要素がオペレータ」という決まりにしてしまうと
引数が0個のマクロを定義できなくなるとかです。
マクロ定義時にマクロ名を何番目に置くか定義できるようにすると、
(macro0 macro1)
のような式でどちらを先に展開するのか、とか。

>>272
グラフで記述された言語って何?という意味の質問でした。

274 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/03/10(土) 22:59:25.81 ]
BNF って構造としてはグラフだよね。

275 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 23:11:34.18 ]
>>262
横レスだけど面白い処理だね
control stringとリストを作ってから最後にまとめるわけか
ただ、その処理だと文字列に~sや~aが現れたときにはエラーになってしまうような。


276 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 23:26:18.14 ]
>>272
細かい話だが普通、循環のない無向グラフと無向を断わらないか。
有向だとDAGが循環はないがツリーでない判例になるから。


277 名前:デフォルトの名無しさん mailto:sage [2012/03/10(土) 23:57:02.65 ]
>>275
アイヤー。"~s"とかのこと忘れてたアルよ。無駄にnilの場合とか考慮してるのにね。

エターナルフォースnreverseは、>>239で闇とか言われてたので、そんなテンションだったとき、
途中で要素を共有してたのを忘れてnreverseして自分が死んだ。相手は死なない。平和。
結局loopとかformatとか良く使わないのであんま分かんなかった。アップルパイ美味しいです。

278 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 07:14:21.07 ]
最初は、データ構造として用意したS式以外に 、プログラムを書くためのM式ってのがあった。
squab.no-ip.com:8080/wiki/435
ja.m.wikipedia.org/wiki/LISP
www.google.co.jp/search?hl=ja&q=M%E5%BC%8F+%E4%B8%AD%E8%A5%BF%E6%AD%A3%E5%92%8C&oq=M%E5%BC%8F+%E4%B8%AD%E8%A5%BF%E6%AD%A3%E5%92%8C

慣れの問題かS式のが見やすい、、

279 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 07:40:21.31 ]
yamlに変換したら読みにくそう

280 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 11:01:54.68 ]
>>278
S式が用意された理由は、データ構造というか構文木の表現のためだよ
だから本来のS式にとって、データ構造の表現は副次的な役割に過ぎない



281 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 11:13:47.61 ]
逆だよ。

データ構造が先で、evalを理論的に説明するために、ソースコードを
データ構造で表現する必要があって、そういうことになった。

282 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 12:08:32.47 ]
元のレポート読んでないけど、Wikipediaの記述ではデータ構造が先だな。

283 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 15:17:50.86 ]
数式処理をしたい
動的データ構造が必要
FORTRANでリスト処理ライブラリを書く
リスト処理ライブラリで数式処理プログラムを書いてみた
数学やってたからλ式採用
万能関数eval発見
Lispの誕生

こんな経緯だったはず。
M式はコンスセルを意識しやすい表記として、かなり初期に考えられたはず。

284 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 17:14:10.01 ]
あれ?そうなるとeval誕生前にはどうやって処理していたんだろうか

285 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 17:50:53.77 ]
evalはインタプリタ。

コンパイラがあったらしいように読めたような気がする。

286 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 22:50:04.17 ]
当初evalは数式処理をしていたが、万能関数ではなかった。

>>285
無茶言うな。

287 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 23:28:18.89 ]
www-formal.stanford.edu/jmc/recursive/node4.html
には、コンパイラがある、と書いてあるように読める。

一方で、これの後半には eval があるけど、
www-formal.stanford.edu/jmc/recursive/node3.html
伝説によれば、ラッセルが実装してみせるまで、マッカーシーは
実装できるものと思っていなかった、とされている。

288 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 23:46:37.82 ]
>>287
FLPL(fortran list processing library)辺りからの経緯の話なんだけど。
その前にもNSS listとかIPLとか先駆的な仕事があるんですよ。
いきなりLispやLispコンパイラが生まれたんじゃなくて。

289 名前:デフォルトの名無しさん mailto:sage [2012/03/11(日) 23:48:29.52 ]
うーん
なんかよく分からなくなってきた
表や図でlispの歴史をまとめているのは無いのかな

290 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 00:07:05.51 ]
IPL軽視されすぎ。
IPLなければLispのようなものはLispにはなってなかったはず。

FLPLは当初IPL-IIに翻訳される予定だったが、
McCarthyがFORTRANで記述できると助言したらしい。



291 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 07:59:45.70 ]
>>276
うん、条件を見落としてた
ごめん

>>273
>>263とは別人だから真意は分からないけれど
CLや特定のSRFIを含むSchemeだと#n=と#n#で循環も書けるから
念の為にグラフも比較対象に含めたんじゃないかと思う

292 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 18:43:06.24 ]
質問です
Gaucheです
hash-table関数などのように可変個引数を取る関数に、自前のリストを出力する関数から値を渡したいのですが、形式をどのように変換すればよいのですか?
e.g.
'((foo bar) (piyo hoge))を
(hash-table '(foo bar) '(piyo hoge))のように渡したいのです

293 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/03/12(月) 19:13:34.20 ]
>>292
aplly を使え。
それと hash-table の第一引数はハッシュテーブルのタイプ (比較関数) だぞ。

294 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/03/12(月) 19:14:35.66 ]
まちごた… aplly じゃなくて apply だ。
こんな基本的なところでタイプミスとはカッコわりぃ〜 orz

295 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 20:20:33.73 ]
Gaucheなら
(use util.list)

(alist->hash-table '((foo bar) (piyo hoge)))

ちなみに、alistからの変換なので、元データの形式を '((foo . bar) (piyo . hoge))
としないと意図と違うことになると思う


296 名前:デフォルトの名無しさん mailto:sage [2012/03/12(月) 20:21:42.12 ]
アップリー

297 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/03/12(月) 20:30:50.45 ]
>>295
あらためでドキュメント見てて気付いたんだが、
alist->hash-table のデフォルトの比較関数は eq? ってのが書いてないのは忘れてるだけなのかなぁ。
practical-scheme.net/gauche/man/?l=jp&p=alist->hash-table
指摘した方がいいだろうか。

298 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 02:44:49.93 ]
Lisper 死んでも誰も困らない
この世のゴミ
早くGCに回収されろ

299 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 03:26:43.37 ]
>>298
おっぱい?

300 名前:プログラミング超初心者 mailto:sage [2012/03/19(月) 03:38:50.39 ]
リリカルLISPっていう学習ソフトで詰んだので答えて頂けるとうれしいです。
問い:関数fを引数の第二要素を返す関数として定義しなさい。ただし引数は一つ。



301 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 03:43:00.67 ]
(define f cadr)

302 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 03:53:04.02 ]
(define (f 大好き おっぱい) おっぱい)

これは糖衣構文だから、このレベルが解けないくらいの初心者なら、

(define
f
(lambda (大好き おっぱい) おっぱい)
)

という感じで、糖衣構文を使わず、
defineによって f に 無名関数lambda を 束縛する、ときちんと覚えたほうがいいかも

303 名前:302 mailto:sage [2012/03/19(月) 03:57:18.63 ]
というか、俺もリリカルLISPでSchemeをはじめたんだけど
ちゃんと途中に引数と戻り値については説明があっただろ
そこは詰む場所じゃねーぞ

304 名前:302 mailto:sage [2012/03/19(月) 04:19:41.21 ]
なんで詰んでるんだろうと思ってリリカルLisp起動してちゃんと問題読んだ
>>300を読み直した
恥ずかしすぎるから吊ってくる

305 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 04:50:09.92 ]
かける言葉もないわ。コレは吊るしかない

306 名前:プログラミング超初心者 mailto:sage [2012/03/19(月) 05:02:57.53 ]
ありがとうございます
何故か分からないけど(define f cadr) で解けました。
これは何かの省略した形ですかね。
ヒントを参考に(define f (lambda (x) なんちゃら))こんなので色々考えましたが
思いつきませんでした。

307 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 05:27:08.66 ]
>>306
cadrを束縛してる手続きでfを束縛するってこと。
要はcadrにfっていう別名を付けた。

(define x 10)

とかと考え方は同じ。

308 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 05:32:15.37 ]
ちなみに
(define f (lambda (lis) (car (cdr lis))))
が多分意図する正解だと思う。
多分 (car (cdr lis)) の部分をやらせたかったんじゃないかな。

(lambda (lis) (car (cdr lis))) は cadr として最初から定義されているので同じ意味ってことね

309 名前:デフォルトの名無しさん [2012/03/19(月) 07:06:35.29 ]
(define (cr ad sex)
(case ad
((a) (car sex))
((aa) (car (car sex)))
((aaa) (car (car (car sex))))
((aaaa) (car (car (car (car sex)))))
((aaaaa) (car (car (car (car (car sex))))))
((aaaaaa) (car (car (car (car (car (car sex)))))))
((aaaaaaa) (car (car (car (car (car (car (car sex))))))))
無限に続く))

これを効率よく実装するにはどうしたらいいでしょうね

310 名前:デフォルトの名無しさん [2012/03/19(月) 08:02:33.27 ]
;;効率的かは分からないが
;;Gauche

(define (cr ad sex)
(letrec ((port (open-input-string (symbol->string ad)))
(iter (lambda (sex)
(let ((ch (read-char port)))
(cond
((eof-object? ch) sex)
((char=? ch #\a) (iter (car sex))))))))
(iter sex)))

;;aかどうかを気にしないなら(length (symbol->string ad))でもいいと思う



311 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 08:16:09.74 ]
×length
○string-length
だった(13行目)

312 名前:デフォルトの名無しさん [2012/03/19(月) 08:36:23.73 ]
(define (cr ad sex)
(define (iter ls sex)
(cond
((null? ls) sex)
((char=? #\a (car ls))
(iter (cdr ls) (car sex)))))
(iter (string->list (symbol->string ad)) sex))

313 名前:デフォルトの名無しさん [2012/03/19(月) 08:44:36.90 ]
;;やっと言いたいことを理解したが効率的ではないな

(define (cr ad sex)
(define (iter ls sex)
(cond
((null? ls) sex)
((char=? #\a (car ls)) (iter (cdr ls) (car sex)))
((char=? #\d (car ls)) (iter (cdr ls) (cdr sex)))))
(iter (reverse (string->list (symbol->string ad))) sex))

314 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 09:15:59.79 ]
そういうのこそマクロ使うんだよ

315 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 09:56:32.71 ]
(define (apls ls arg)
(if (null? ls)
arg
((car ls) (apls (cdr ls) arg))))
とでもして
(apls (map (λ (ch) aならcar dならcdr)
(stringー>list (symbol->string ad)))
sex)
みたいなのとか

316 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/03/19(月) 10:06:05.34 ]
>>310
もっと積極的に (というか無闇に) Gauche の機能を使ってみた。

(define (cr a x)
($ port-for-each (cut $ update! x $ case <> ((#\d)cdr)((#\a)car)) $ cute read-char $ open-input-string $ symbol->string a)
x)

317 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 10:24:33.65 ]
ごーしゅよくわからないけど適用順ぎゃくじゃない?

318 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 18:17:19.77 ]
Closure(これは古い日記です) - Diary(uid) d.hatena.ne.jp/uid/20051129
よくわからないんだがclusureって無名関数のことだったの?

319 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 18:21:49.70 ]
lambdaは無名関数でもありクロージャでもある
無名であることとクロージャは無関係

320 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 18:42:25.98 ]
Lispスレ的には、昔のlambdaで作られる関数は動的束縛で、クロージャではなかった。

あと、無名関数という特別なものがあるとか考えるよりも、関数に名前が必要な言語と
そうでない言語があって、名前が必要ない言語では名前を付けないと無名(匿名)関数に
なる、という風に考えたほうが良いと思われ。



321 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/03/19(月) 18:58:38.20 ]
>>318 言葉の意味はとりあえず Wikipedia 見ておけばだいたいわかる。
ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%83%BC%E3%82%B8%E3%83%A3

>>320 を補足すると昔の方式の LISP のひとつには emacs lisp がある。
喩えば対話モードで
(lambda () 'hoge)
と入力すると
(lambda nil (quote hoge))
と返ってくる。
これは emacs lisp の中では lambda で作られる関数は単に「car が lambda というシンボルであるリスト」として表されていることを意味する。
静的な環境と結び付いていない。

あと、極論するなら Scheme の手続きは全て無名。
(define (x) 'hoge)
みたいに書いても、これは
(define x (lambda() 'hoge))
の構文糖だから。
名前は変数についているのであって関数の名前ではない。

322 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 06:14:08.18 ]
>>314
わからないので、やってみてください

323 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 07:04:51.44 ]
>>322
ほれ
(define-macro (cr ad sex)
(let loop ((ad (string->list (symbol->string ad))))
(if (null? ad)
sex
(if (char=? (car ad) #\a) `(car ,(loop (cdr ad))) `(cdr ,(loop (cdr ad)))))))


(cr a '((a) b c))
=>(a)
(cr aa '((a) b c))
=>a
(cr ad '((a) b c))
=>b
(cr add '((a) b c))
=>c

324 名前:デフォルトの名無しさん mailto:sage [2012/03/21(水) 20:19:10.55 ]
SchemeとCommonLispは完全に時代遅れ
これからはclojureの時代

325 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 08:22:26.09 ]
Clojureは大好きだけどそんなことはないと思う

326 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 13:41:51.74 ]
>>325
どんなところがそんなことないと思うのですか?

327 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 14:30:33.31 ]
common lispとschemeのコードをシンタックス・ハイライトで色づけできる
wikiを自分のサイトに設置したいのですが、何かおすすめはありますか?
これまではgaucheのwilikiを使っていましたが、
wilikiではシンタックス・ハイライトを導入できそうになかったので。

328 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/03/22(木) 15:12:02.26 ]
>>327
google-code-prettify なら CL や Scheme に対応してるし、 WiLiKi に導入することも簡単だよ。

329 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 15:22:44.98 ]
>>328
ありがとう。google-code-prettifyの使い方を見てみた。
javascriptとcssのファイルの読み込みはwilikiに簡単に追加できそう。
だけど、<pre class="prettyprint linenums:4">のように
pre要素のclassに任意の文字列を渡すことはwilikiではできないのでは?

330 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 16:04:46.17 ]
ここ、Wilikiでシンタックスハイライト使ってるけど、wiliki本体を改造してるのかな。
community.schemewiki.org/?scheme-style



331 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 16:11:46.88 ]
>>326
JVMやCLIのような「ホスト」環境にアクセスするのは自然な事としている所はCLやSchemeとは違うと思う
それに、共有された状態を管理する手段としてロックを推奨しないなど、まだ一般に浸透していない設計上の判断がある
その判断が良いものかどうかは別の話だけど、少なくともCからC++のように
「コンパイラを入れ替えて、多少のエラーを直せば一応移行できる。それからより良い方法を学べばいい」というわけにはいかない

俺はClojureをCLやSchemeを過去の遺物にするような何かではなく、今までも沢山あった方言の一つだと思っていて
その上でClojureが好きで、長期間続いて欲しくて、他の言語にClojureが良い影響を与えたらいいなと思う
だから「CL・Schemeは死んだ、これからはClojure」みたいな主張には頷けない

332 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 16:36:24.09 ]
>>330
括弧のネストの深さに応じて色が変わるのは
pastebinのサイトと同じっぽいな


333 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/03/22(木) 16:40:39.59 ]
>>330
プロパティを追加したいだけなら
wiliki:format-page-content メソッドをオーバーロードすればいいんだよ。
next-method の結果から sxpath で pre を探して sxml:add-attr でプロパティを追加。
直接ソースコードを書き換える必要はない。

>>329
linenums に関しては記法自体を追加しないと無理かなぁ。


334 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/03/22(木) 16:51:16.23 ]
もちろん、同様にメソッド追加によって pre の中身を弄ることもできるので JavaScript に頼らないハイライトも可能。
r6rs のハイライトは leque さんが公開しているコードがあるのでこれと組み合わせられると思う。
www.katch.ne.jp/~leque/software/gauche/r6rs-shtml-markup/


335 名前:デフォルトの名無しさん mailto:sage [2012/03/23(金) 00:44:36.41 ]
>>333
ありがとうございます。
いろいろいじってみます

336 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/03/23(金) 01:35:41.62 ]
最悪の場合でも with-module を使えばどこへでも割り込めるのでソース自体を書き換えなければいけないってことはそんなに多くない。
でも、 internal define は置換えられないのでそれを覆う関数ごと置換えることになって面倒だからそういうときは無理せずに
ソースに手を加えた方がよいかもしれず。

337 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 10:53:21.86 ]
gaucheのfile-mtimeで取り出した時間をもとに
y/m/d形式の日付の文字列を取得するには
どうすればよいでしょうか?
rubyでいうところのこれです
Time.at(タイムスタンプ).strftime("%Y/%m/%d")

338 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 11:14:38.10 ]
sys-strftime

339 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 11:29:54.45 ]
>>338
まさにそのとおりの関数があったのですね。ありがとうございます。

340 名前:営利利用に関するLR審議中@詳細は自治スレへ [2012/04/03(火) 19:58:44.16 ]
directory で再帰的にファイルを探すときに、ある特定のディレクトリのみを無視したいのですが、
どうすればいいでしょうか?

Ruby の Find.prune のようなものを探しています。
doc.ruby-lang.org/ja/1.8.7/method/Find/m/find.html



341 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/04/03(火) 21:01:03.89 ]
>>340
処理系は?
Gauche なら directory-fold を使うのが妥当。
practical-scheme.net/gauche/man/?l=jp&p=directory-fold

342 名前:営利利用に関するLR審議中@詳細は自治スレへ [2012/04/03(火) 23:42:23.42 ]
>>341
SBCLとかclispとかでポータブルに書きたいです。


343 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/04(水) 00:06:18.83 ]
>>342
weitz.de/cl-fad/#walk-directory

344 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/04/04(水) 00:16:01.86 ]
>>342
Common Lisp の話はなるべく Common Lisp スレへ行ってね。

345 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/04(水) 00:24:08.01 ]
Scheme の話は Scheme スレでね。

346 名前:営利利用に関するLR審議中@詳細は自治スレへ [2012/04/04(水) 00:27:53.75 ]
Lisp SchemeスレとCommon Lisp入門スレってどういう関係なの?
ここはscheme専門スレなの?またはCommon Lispだけは禁止なの?
禁止なら1に書いておくべきでしょ
あちらはCommon Lispの初心者用スレじゃないの?

347 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/04(水) 00:32:12.37 ]
>あちらはCommon Lispの初心者用スレじゃないの?
お前にぴったりじゃん

348 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/04(水) 00:45:51.31 ]
>1
> Common Lisp、SchemeをはじめとするLisp族全般のスレです

自分も知らないうちにこの一文忘れて同じ事レスったことがある。

349 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/04/04(水) 00:50:46.49 ]
>>346
そこらは歴史的経緯というやつで…。 別に Common Lisp の話が禁止というわけじゃないよ。
ただ、 Common Lisp "固有の" 話は Common Lisp スレに集約した方が話が早いのであえてこっちに書かんでも、という感じ。

350 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/04(水) 00:58:05.34 ]
複数スレチェックするのめんどいから、全部ここでいい感じ。



351 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/04(水) 00:59:37.49 ]
Common Lispとか興味ないわ

352 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/04(水) 01:49:47.60 ]
>>342
んじゃCLスレに誘導。

toro.2ch.net/test/read.cgi/tech/1330888006/105

353 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/04(水) 21:12:56.59 ]
CLスレが立った経緯は・・・
昔、変なのがいたんだよ
Ruby最高とかそんなのもいたw

354 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/04(水) 21:24:35.21 ]
RubyはLispの一種だしな

355 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/04(水) 22:17:08.95 ]
>>353
comp.lang.lispで延々怪気炎を上げ続けてるWilliam Jamesさんみたいな人ですね。分かります。

356 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/04(水) 22:29:45.60 ]
gavino もまだ暴れてるんだなスゲー。学生時代にも見た記憶あるから、10年近くtrollしてんのか。
海外のキ印は気合い入ってんな…

357 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/04(水) 22:38:24.47 ]
ジャンルは違うが日本が誇る偉大なる日下部師も負けちゃいないぜ。

358 名前: ◆QZaw55cn4c mailto:sage [2012/04/04(水) 22:47:10.01 ]
>>357
それはどちらでみることができるのでしょうか?

359 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/05(木) 01:36:12.72 ]
今は主にTwitterかね

360 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/05(木) 04:25:53.87 ]
はつみみです



361 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/07(土) 09:42:49.60 ]
ということにしたいのですね?

362 名前:デフォルトの名無しさん mailto:sage [2012/04/13(金) 16:46:14.80 ]
n次元のリスト1つをつくりたいです
'(((2 2 2) (2 2 2)) ((4 4 4) (4 4 4)) ((6 6 6) (6 6 6)))
リストの内容はここでは一番外側のリストの順番に2をかけたものとします
(make-my-list (lambda (x) (* 2 x)) '(3 2 3))
このように引数を与えて上のようなリストをつくる関数orマクロはどうかけばよいですか
(use srfi-1)と(iota 3 1)をつかって(1 2 3)を作ったあとの処理が思いつきません

common lispならloopを重ねたうえでcollectを使えばなんとかなるきがするのですが
schemeの場合どこからどう手をつければいいかわかりません

363 名前:デフォルトの名無しさん mailto:sage [2012/04/13(金) 18:10:30.94 ]
引数が何で結果を何にしたいのか
自分でしっかり決めてないからだと思うよ

364 名前:デフォルトの名無しさん mailto:sage [2012/04/13(金) 18:11:28.49 ]
俺以外にも>>362が何言ってるのか分からない人がいて安心した

365 名前:デフォルトの名無しさん mailto:sage [2012/04/13(金) 18:25:45.32 ]
(make-my-list (lambda (x) (* 2 x)) '(3 2 1))
(make-my-list (lambda (x) (* 2 x)) '(4 2 3))
(make-my-list (lambda (x) (x)) '(3 2 3))
の結果は?

366 名前:デフォルトの名無しさん mailto:sage [2012/04/13(金) 18:40:54.71 ]
schene素人が作ってみた
(define (make-my-list proc l)
 (define (henna-list-tsukuruyo l x)
  (define num (car l))
  (if (null? (cdr l))
    (map (lambda _ x) (iota num))
    (map (lambda _ (henna-list-tsukuruyo (cdr l) x)) (iota num))))
 (map (lambda (x) (henna-list-tsukuruyo (cdr l) (proc x))) (iota (car l) 1)))
(write (make-my-list (lambda (x) (* 2 x)) '(3 2 3)))
> (((2 2 2) (2 2 2)) ((4 4 4) (4 4 4)) ((6 6 6) (6 6 6)))

367 名前:デフォルトの名無しさん mailto:sage [2012/04/13(金) 19:27:43.96 ]
すみません
make-my-listの第一引数には一番外側のリストの順番に対して操作する関数を、
第二引数はリストをわたします。
第二引数のリストは、説明がしづらいのですが、1番目は生成されるリストのatomの数、2番目は1番目をいくつまとめるか、3番目は2番目をいくつまとめるか、という風になります

>>365
こうしたいです
>(make-my-list (lambda (x) (* 2 x)) '(3 2 1))
(
((2 2 2) (2 2 2))
)

>(make-my-list (lambda (x) (* 2 x)) '(4 2 3))
(
((2 2 2 2)(2 2 2 2))
((4 4 4 4)(4 4 4 4))
((6 6 6 6)(6 6 6 6))
)
>(make-my-list (lambda (x) (x)) '(3 2 3))
(
((1 1 1) (1 1 1))
((2 2 2) (2 2 2))
((3 3 3) (3 3 3))
)

368 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/04/13(金) 19:50:21.27 ]
>>367
部分的に共有構造になってるけどそれでもいいか?

(define (make-my-list p l)
(let ((n (car l))
(m (cadr l))
(z (caddr l)))
(map (lambda(x) (make-list m (make-list n (p x)))) (iota z 1))))

369 名前:デフォルトの名無しさん mailto:sage [2012/04/14(土) 12:55:57.88 ]
ありがとうございます。

370 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 22:00:01.44 ]
質問です。プログラミングのコードって、Tabキーで解りやすくインデントがされますよね。

けれど、こういう掲示板にコードをコピペで張り付けると、インデントが全部消えちゃいます。

掲示板にコピペしても、インデントが残るようにするにはどうしたらいいんでしょうか。
ちなみにエディターはemacsです。



371 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 22:05:21.75 ]
気にしないでいいと思いますが
Pythonみたいなインデントに文法上の意味がある言語ならともかく
どうしてもというなら&nbsp;とか全角空白とか

372 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/04/16(月) 23:08:37.71 ]
>>370
このスレの住人なら emacs かそれに準ずる高機能エディタを使ってます。
それにコピペして数ストロークのコマンドでインデントは再現できます。
emacs なら C-x h でバッファ全体を選択した後に C-M-\ ですね。
なので、少なくともこのスレではあまり考えなくてかまいません。

>>371 の示す手順も掲示板のクセ次第です。
にちゃんねるでは通用しても掲示板の全てで通用するわけではないです。
見る側のブラウザやフォント指定次第では幅が合わずにやっぱり表示が崩れたりする上、
実際に実行させるために空白文字に戻す必要が生じてかえって手間だったりも。
それも数ストロークのコマンドで出来ますけど。

最近ではコードの断片を保存するサービスがいくつかあります。
そういうサイトを利用して掲示板には URL を貼り付けるといったこともよく行われています。
主なところでは、
ideone.com/
codepad.org/
codetter.com/
https://gist.github.com/
でしょうか。

各掲示板によって (にちゃんねるなら各スレごとに) だいたいの運用方法が暗黙に定着しているので、
過去のやりとりを参考にして下さい。

373 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 23:51:34.70 ]
Janeで見ているなら、レス番にアンカーがあればそこを右クリック
なければ選択状態にして右クリック

374 名前:370 mailto:sage [2012/04/17(火) 09:08:20.11 ]
>>372 動作確認(C-M-\)をしました。感動しました。マジでありがとう。

375 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 11:48:33.71 ]
>>370
2chでは行頭の半角スペース・Tab は何個あっても消える。

全角スペースならおk。

376 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 16:06:43.90 ]
dat上では消えてないから、専ブラで行頭空白保存する設定で使えばインデント復元できる。


377 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/04/18(水) 22:25:05.23 ]
Guile 2 って Windows で動かんの?

378 名前:デフォルトの名無しさん mailto:sage [2012/04/21(土) 21:54:21.81 ]
Gauche0.9.3きちゃう?
これでGauche-tkも動く〜

379 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/04/21(土) 23:36:46.70 ]
Windows でスレッドが使えるようになったのが個人的にはかなりありがたい。
それと https 通信に stunnel が不要になったのもデカいかな。

リリースに向けた作業って地味に面倒でモチベーションを維持しにくいからそうすぐってわけでもないと思うな。

380 名前:デフォルトの名無しさん mailto:sage [2012/04/21(土) 23:42:08.03 ]
まじか。Windows環境でもスレッドうごいちゃうの?ビルド環境ないんで 0.9.3 は wktk しながら待たせてもらいます。



381 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/04/21(土) 23:53:48.61 ]
そんなおまいらのために最新版を Windows 向けにビルドしてやったぞ。
www1.axfc.net/uploader/Ne/so/131324
Gauche-tk は入れといたけど tk そのものは別途インストールしてね。

382 名前:デフォルトの名無しさん mailto:sage [2012/04/22(日) 01:08:43.25 ]
やだ…仕事はやい…
ありがとー

383 名前:デフォルトの名無しさん mailto:sage [2012/04/22(日) 12:30:49.56 ]
なにこのキモイ流れ?

384 名前:デフォルトの名無しさん mailto:sage [2012/04/22(日) 12:36:45.57 ]
河童のキモ流れ … 河童が肝を洗っているとうっかり流してしまいそのまま死ぬこと。 転じてキモがられて社会的に死ぬこと。

385 名前:デフォルトの名無しさん mailto:sage [2012/04/23(月) 14:13:08.18 ]
ユーモアの欠片もないな

386 名前:デフォルトの名無しさん mailto:sage [2012/04/27(金) 18:24:18.79 ]
すいません、質問です。
'((a b) c d)

(list (list 'a 'b) 'c 'd)
は、どこが違うんでしょうか?

387 名前:デフォルトの名無しさん mailto:sage [2012/04/27(金) 18:48:39.11 ]
>>386
tips.lisp-users.org/scheme/index.cgi?%E3%83%AA%E3%82%B9%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B

388 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/04/28(土) 00:45:03.59 ]
>>386
C++ や Java の感覚で表現するなら前者はリテラルで後者はコンストラクタによってオブジェクトを作ってるイメージかなぁ。


389 名前:デフォルトの名無しさん mailto:sage [2012/04/28(土) 02:16:59.90 ]
文字列と文字列の入った配列ぐらい違う

390 名前:デフォルトの名無しさん mailto:sage [2012/04/28(土) 02:37:36.59 ]
>>389
いや、無理に参加しなくてもいいんだよ



391 名前:デフォルトの名無しさん mailto:sage [2012/04/28(土) 03:11:40.27 ]
前者は処理系によっては変更不可属性を付けられてもおかしくない

392 名前:386 mailto:sage [2012/04/28(土) 08:23:46.72 ]
387みたけど、しっくりこない。
「quote を使うとリストを定数として書くことができる。」とか書いてあるけど

>(define symbol_1 '(1 2 3 4))
>ok
>(car symbol_1)
1
>(cdr symbol_1)
(2 3 4)
うーん、わかんない。symbol_1は定数なの?
(car 'symbol)をやってみると、
1st argument symbol to car not List object っていう風に怒られます。


393 名前:デフォルトの名無しさん mailto:sage [2012/04/28(土) 08:39:01.76 ]
quoteは、渡されたS式をそもそもソースコードとして評価せずそのまま返す、という機能だよ

394 名前:デフォルトの名無しさん mailto:sage [2012/04/28(土) 14:56:42.22 ]
>>392
CLで書いているけどこんな形で変わってくる
ttp://ideone.com/nT1Tr

quoteは読み込みのタイミングで一回だけリストを作っているけど、
listやconsなんかは評価ごとに新しいリストを作っている。

あと、もう一度symbol_1を評価してみれば分かるけど、
carやcdrはsymbol_1を変更してない。

395 名前:デフォルトの名無しさん mailto:sage [2012/04/28(土) 21:03:13.31 ]
わかんない人は処理系のソースを読もうぜ
仕組みが一発でわかるぜ
このへんはLISPでLISP書いてもわかんないとこだぜ

396 名前:デフォルトの名無しさん mailto:sage [2012/04/29(日) 02:10:46.39 ]
>>392
> (car 'symbol)をやってみると、
> 1st argument symbol to car not List object っていう風に怒られます。

readした後には[ car | [ symbol | nil ]]と言う二つのcons cellになってる。
[ car | [ quote | [ symbol | nil ]]]ではない。
carの引数がsymbolというシンボルオブジェクトなのだから、リストでないと怒られて当たり前。

397 名前:デフォルトの名無しさん mailto:sage [2012/04/29(日) 02:51:05.97 ]
atomとlistとconsの違いも判ってないやつにquoteなんて教えても無駄

398 名前:デフォルトの名無しさん mailto:sage [2012/04/29(日) 03:21:45.50 ]
うん、まあ判らないだろうなということ教えてるよね

399 名前:デフォルトの名無しさん mailto:sage [2012/04/29(日) 05:15:35.89 ]
括弧で括った式
(関数 引数)
この形式は関数の適用を意味する
関数と引数は一度しか評価されない

括弧で囲った式には、関数ではない特殊形式も存在する
(特殊形式 引数)
特殊形式の引数が評価されるかは、その特殊形式によって決まる

引数の数は関数や特殊形式によって決まる

式(1 2 3 4)は、最初の要素が関数でも特殊形式でもないため、
評価するとエラーとなる

引用符の付いた式
'(1 2 3 4)は評価すると(1 2 3 4)が返る
'(1 2 3 4)は(quote (1 2 3 4))と書ける
quoteは特殊形式であり、
引数を評価せず、そのまま返すという機能を持つ

400 名前:デフォルトの名無しさん mailto:sage [2012/04/29(日) 05:18:28.64 ]
(define symbol_1 '(1 2 3 4))
defineは特殊形式であり、右辺の式を評価した結果の別名を定義する
ここでは右辺の'(1 2 3 4)が評価され(1 2 3 4)となり、
symbol_1 → (1 2 3 4)という関連付けが行われる
symbol_1のようなシンボルは評価すると関連付けられた値を返す
式symbol_1を単体で評価すると(1 2 3 4)を返す

シンボルcarには関数が関連付けられており、
この関数はconsで作成された2値を格納するコンテナから、
最初の要素を返すという機能を持つ
式carを単体で評価するとその関数を返す

(car symbol_1)は上で説明した通り関数の適用であり、
symbol_1が評価され、その部分が(1 2 3 4)になり、
同時にcarが評価され、その部分が関数になる
それぞれの評価が終わるとcarの関数が適用され、
(1 2 3 4)の最初の要素の1が返る



401 名前:デフォルトの名無しさん mailto:sage [2012/04/29(日) 05:27:06.74 ]
carの関数適用までが終わると、
式(car symbol_1)のすべての評価が終わったことになり、
結果を表示した後、次の式へ移るか、入力待ち状態になる
この一連の流れをread-eval-print-loop(REPL)という

402 名前:392 mailto:sage [2012/04/29(日) 14:57:46.86 ]
わかりました。すごくありがとう。

carに束縛された関数が評価されるのと同時に、
symbol_1が評価されて(1 2 3 4)が返り、

(1 2 3 4)は、carに束縛された関数に渡されるから、
>(car (1 2 3 4))
>1
となるわけね。みんな、ほんとうにありがとう。

403 名前:デフォルトの名無しさん mailto:sage [2012/04/30(月) 00:07:01.81 ]
本屋で「scheme手習い」と「scheme修行」がScalaのコーナーにあったんで
Lispコーナーに移してきた。


404 名前:デフォルトの名無しさん mailto:sage [2012/04/30(月) 21:13:09.57 ]
俺も分離状態にあった『手習い』と『修行』をセットにしておいた。

405 名前:デフォルトの名無しさん mailto:sage [2012/05/01(火) 18:43:33.28 ]
プログラミングGaucheがscheme関連の良書だと気付かれてないのはどうすれば良いの

406 名前:デフォルトの名無しさん mailto:sage [2012/05/01(火) 20:31:54.05 ]
>>405
第4部がつまんないからだろ?
その他の部分はありきたりの言語入門書と大して変わらんし…


407 名前:デフォルトの名無しさん mailto:sage [2012/05/01(火) 20:55:25.75 ]
ありきたりと言うが、schemeにはまっとうな言語入門書が他にないじゃん

408 名前:デフォルトの名無しさん mailto:sage [2012/05/01(火) 21:17:48.45 ]
入門書は必要ないだろ

409 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/05/01(火) 21:21:41.12 ]
前にも書いたような気がするが、言語そのものに関する解説はケント・ディヴィグの「プログラミング言語SCHEME」が一番まともだと思う。
このレベルなら入門者にも充分に理解できる範囲だと思うし。
が、俺はだいぶん後になってから読んだので本当に入門に適しているかどうかわかんね。

410 名前:デフォルトの名無しさん mailto:sage [2012/05/01(火) 22:17:12.12 ]
「プログラミング言語SCHEME」が入門者用だと?ふざけんな!
若い頃あれよんで、あまりのストイックさに泣いたわ。



411 名前:デフォルトの名無しさん mailto:sage [2012/05/01(火) 22:53:15.92 ]
今なら『Scheme手習い』も『Scheme修行』も本屋に行けばあるだろうが。

これで岩波コンピュータサイエンスの『Scheme入門』も再版されたら文句なしなのだが。

412 名前:デフォルトの名無しさん mailto:sage [2012/05/01(火) 23:03:21.11 ]
岩波のcommon lisp入門は持っているけど
schemeの方はどんな感じ?

413 名前:デフォルトの名無しさん mailto:sage [2012/05/01(火) 23:11:06.87 ]
>>405
半年強ぐらい前に日本語ネイティブな入門書として勧めたら、環境構築か忘れたけど何か欠けてるという指摘があった。

その時節電で止まってたオンライン版はみられる状態になってた。
karetta.jp/book/programming-gauche

414 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/05/01(火) 23:41:52.38 ]
>>410-411
手習いと修行は問題集みたいな感じだと思うけどな。
何もしらないところから手探りで問題を問いていく内に
Scheme への理解へも深まっている、というようなコンセプト。
それはそれで入門書としてよく出来てるいい本だと思うけど、
「言語」が前面に出てるのは「プログラミング言語SCHEME」
じゃないかという感じ。 やっぱ一番最初に読む本では無いかなぁ。

415 名前:デフォルトの名無しさん mailto:sage [2012/05/02(水) 04:24:10.08 ]
>>414
俺はネットで公開してる原著の方でScheme入門したけどすんなり読めたよ。
プログラミング言語そのものが初心者という人向けではないけど
Javaなり何なりわかってる人がSchemeを扱えるようになるには平易でいい。

416 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/05/06(日) 22:23:10.69 ]
>>378
リリースに向けた作業が大詰めに入ってる模様。

417 名前:デフォルトの名無しさん mailto:sage [2012/05/07(月) 18:40:20.76 ]
>>416
おー
msysで野良ビルドしちゃる
exeで勝手にインスコされるようなのは嫌なんよね

418 名前:デフォルトの名無しさん mailto:sage [2012/05/08(火) 02:32:53.29 ]
gaucheはぜひネイティブコンパイルを実装してほしい


419 名前:デフォルトの名無しさん mailto:sage [2012/05/08(火) 05:12:40.78 ]
以前、試しにJITコンパイラまでなら実装してみたけど、
保守コストとのトレードオフで採用は難しいみたいな話してなかったっけ?
ほぼひとりで開発してる上に本業もあるわけだし、時間足りんでしょう。

420 名前:デフォルトの名無しさん mailto:sage [2012/05/08(火) 07:05:34.34 ]
CPUは1つじゃないからな
ARMなんかは複数命令混ざってるから
JIT専門業者がいたら丸投げした方がいい



421 名前:デフォルトの名無しさん mailto:sage [2012/05/08(火) 09:17:19.99 ]
ネイティブコンパイル信仰者は、まずは既存のコンパイラをちゃんと調べて、
どういうpros-consがあるかちゃんと示せばいいのに、なんで「ネイティブネイティブ」って
うわごとのようにくりかえすだけなんだろうか。

StalinとかChickenとか既にあるんだから。

422 名前:デフォルトの名無しさん mailto:sage [2012/05/08(火) 09:44:36.96 ]
gaucheが良いけどネイティブでないのが不満なのでは。
自分用にgaucheで書いたのを、配布段階でD言語で書き直した経験がある。
一般人への処理系インストールサポートは無理だった。

423 名前:デフォルトの名無しさん mailto:sage [2012/05/08(火) 11:40:46.38 ]
動的型がどうしよもない
ネイティブ化してもスレッデドコードに毛が生えた程度
ボトルネックをなんとかしないと個人でやる限界に近い

424 名前:デフォルトの名無しさん mailto:sage [2012/05/08(火) 12:32:42.66 ]
配布だけの問題ならちょっとした工夫でなんとかなるだろ。
形式だけ exe になってりゃいいって言うなら mingw-exify が使えるし、
プリコンパイルしておけば速度も多少は改善できる。
もともとスクリプト言語として使う分には充分すぎる速さだしな。

いずれにしても配布しにくいという問題については考えているところみたいなので、
blog.practical-scheme.net/shiro?20120506-being-used
どういう解決がいいのか希望があれば今の内に提案すれば方向性に
影響を与えられるかもしれないよ。

425 名前:デフォルトの名無しさん mailto:sage [2012/05/08(火) 13:29:19.90 ]
all in one な exe ファイルが欲しい、ということなら全く別の話だね

426 名前:デフォルトの名無しさん mailto:sage [2012/05/08(火) 13:58:13.39 ]
元のexe欲しいって話からは外れていっていると思うけれど、
>>424
そこに書いてある配布は、処理系自身の問題で。
>>422の言っているのはアプリの話でしょ。

最近、スクリプト系は、
処理系自身がコード配布も含めたパッケージシステム持つのが多いよね。
WindowsもMacも、aptみたいに依存関係まで管理するオープンな機構がないから。

node.jsはnpmってのが出来た。
ただ事前にnode.js, python, gitをインストールしなければいけない。
schemeで全部書いて配布に含めることである程度解決できるんじゃないか。
R(r-project.org)は配布に含まれてる。そしてCRANからインストール。

427 名前:デフォルトの名無しさん mailto:sage [2012/05/08(火) 14:29:13.64 ]
最適化の話でなくてexeにするだけなら難易度はかなり低い
gaucheもできたような
つーかexeにしたいなんて誰か書いたか?

428 名前:デフォルトの名無しさん mailto:sage [2012/05/08(火) 16:53:39.03 ]
>>426
gaucheも gauche-package install <URL> で一応webから直接インストールできる。
依存関係はみてくれないみたいだし、CPANみたいに一ヶ所にまとまっててほしいけど。


429 名前:デフォルトの名無しさん mailto:sage [2012/05/08(火) 17:00:58.33 ]
やっぱり芋づる式にインストールしたいね。

430 名前:デフォルトの名無しさん mailto:sage [2012/05/08(火) 20:31:22.63 ]
処理系やライブラリをインストールしてもらうのって難しいからな。
CUIを使うと壊れると思ってやがる。GUIのパッケージ管理システムも欲しい。



431 名前:デフォルトの名無しさん mailto:sage [2012/05/08(火) 21:07:41.24 ]
Rは、R commandarってGUIラッパーもパッケージとして配布されてる。

432 名前:デフォルトの名無しさん mailto:sage [2012/05/08(火) 21:16:37.47 ]
py2exeならぬgo2exeか

433 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/05/08(火) 21:46:15.10 ]
>>426
そもそも >>422 がネイティブコードが欲しい理由は処理系のインストールをサポートすることにネックがあると述べている。
ここではネイティブコードにするのは処理系のインストールの手間を無くす手段のひとつとしてやっているので、
処理系のインストールが充分に簡単、あるいは意識されないならばネイティブコードにする必要もなかったことになる。
確かにそれぞれ処理系の話とアプリケーションの話だけど根は同じだよ。


434 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/05/08(火) 21:47:32.52 ]
>>427
> 最適化の話でなくてexeにするだけなら難易度はかなり低い
> gaucheもできたような

mingw-exify だな。 コードを文字列のままくっつけるだけだけど。
速度が要る場合にはライブラリをプリコンパイルする仕組 (gencomp) を使えばちょっと速くなるし最適化も
普通にスクリプトをロードするよりはちょっと強くかかるはず。

> つーかexeにしたいなんて誰か書いたか?

exe を作らずにネイティブコンパイルする実行モデルに慣れてない人が
ネイティブコンパイル = exe を作ると理解したんじゃない?

435 名前:デフォルトの名無しさん mailto:sage [2012/05/08(火) 21:55:55.75 ]
>>432
exeじゃなくてhellじゃなかろか、extension名


436 名前:デフォルトの名無しさん mailto:sage [2012/05/08(火) 22:02:13.79 ]
mingw-exifyっての使えば数メガバイトで
普通のexeアプリのようにschemeアプリを配布できるの?

437 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/05/08(火) 22:06:36.70 ]
>>436
Gauche のライブラリがいずれにせよ必要なので単一の exe に出来るわけではない。
windows 用 gauche のパッケージに入ってる gauche-install.exe 等は mingw-exify によって処理して
作っているのでソース読めば意味がわかるよ。

438 名前:デフォルトの名無しさん mailto:sage [2012/05/08(火) 22:56:15.91 ]
delphiだって糞でかいランタイムが必要なんだぜ
気にすんな

439 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/05/08(火) 23:04:26.33 ]
まったくだ。

440 名前:デフォルトの名無しさん mailto:sage [2012/05/08(火) 23:28:39.38 ]
むしろ、Gaucheのバイナリ用ランタイム作ればいいのに
配布して終わりの形にできないと、作っても売れないのでおもちゃの域を出ない



441 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/05/08(火) 23:47:14.53 ]
dll 類はともかく、 scm ファイルが多すぎるな。
zip にまとめたアーカイブから直接ロードする機能の提案はあったので、コア付近で実装すれば scm を全部アーカイブしてしまえるかも。
zip からロードする拡張パッケージはあるけど、それが依存しているライブラリを zip に入れるわけにはいかないので、
本格的にやろうとすると Gauche 本体で対応する必要はあると思う。

442 名前:デフォルトの名無しさん mailto:sage [2012/05/09(水) 00:31:32.02 ]
でも、そこまでできるようになったら
scheme処理系の中でも群を抜いて使われるようになると思う

443 名前:デフォルトの名無しさん mailto:sage [2012/05/09(水) 04:49:51.25 ]
でもdllは実行時までに別ファイルになってないとならないだろ? 実行前に展開してもらう
なら、アプリとGauche一式をzipで配っても同じことのような気もするんだが。
どうしてもexeひとつがいいなら、自己解凍アーカイブにしてexeをクリックしたら
一時ディレクトリに展開してアプリ起動する、とか?

444 名前:デフォルトの名無しさん mailto:sage [2012/05/09(水) 21:11:32.34 ]
>>433
それが困る理由は、メモ帳で改造できちゃうこと

445 名前:デフォルトの名無しさん mailto:sage [2012/05/09(水) 21:32:56.06 ]
>>444
オープンソース派から見ればむしろ望ましい。

446 名前:デフォルトの名無しさん mailto:sage [2012/05/09(水) 21:39:11.08 ]
秘密がないと金にならない

447 名前:デフォルトの名無しさん mailto:sage [2012/05/09(水) 22:20:58.23 ]
現実は厳しいんだな

448 名前:デフォルトの名無しさん mailto:sage [2012/05/10(木) 02:47:58.65 ]
ゴミみたいなネイティブコードバックエンドなら
ちょっと頑張れば実装できるだろうけど
難読化のために機械語を使うのは正しいのか……?

449 名前:デフォルトの名無しさん mailto:sage [2012/05/10(木) 03:10:09.28 ]
gaucheのwilikiで
bad type of argument for str: #<<regmatch> ほにゃらら>というエラーメッセージが出たら、
編集ボタンが消えてしまい、そのページを編集することができなくなってしまいました
データそのものは消えていないと思うのですが、どうすればよいのでしょうか。

450 名前:デフォルトの名無しさん mailto:sage [2012/05/10(木) 03:34:20.49 ]
ソース配布が嫌ってだけなら今でもVMコードをdllにできるでしょ (Gauche本体のビルド時にやってる)
非公式みたいだけど。



451 名前:デフォルトの名無しさん mailto:sage [2012/05/10(木) 09:06:02.53 ]
>>449 practocal-schemeのwilikiならこんな所に書いたりせず、Shiroさんに連絡汁

452 名前:デフォルトの名無しさん mailto:sage [2012/05/10(木) 09:07:29.26 ]
>>451
そうですね。そうします。

453 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/05/10(木) 18:53:41.68 ]
Gauche 0.9.3 キター

454 名前:デフォルトの名無しさん mailto:sage [2012/05/10(木) 19:39:47.88 ]
WinのPortable版が来るらしいぞ。配布がかなり楽になるな。

455 名前:デフォルトの名無しさん mailto:sage [2012/05/10(木) 22:28:50.49 ]
お、来たのか

456 名前:デフォルトの名無しさん mailto:sage [2012/05/10(木) 22:42:12.60 ]
chatonでshiroさんが投稿しているね。
sourceforge.net/projects/gauche/files/Gauche-mingw/Gauche-mingw-0.9.3.zip/download
素晴らしい。これでusbメモリに入れて持ち運べる。

457 名前:デフォルトの名無しさん mailto:sage [2012/05/10(木) 23:24:22.05 ]
おいらは今cygwinでビルド中
こいつが終わったらmsysのもやんなきゃ

458 名前:デフォルトの名無しさん mailto:sage [2012/05/10(木) 23:27:17.89 ]
>>457
windowsなら>>456を入れれば良くない?
cygwinでmingwのgaucheを動かす弊害って何かあるのかしら。

459 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/05/10(木) 23:34:38.09 ]
>>458
cygwin は間に入ってファイルパスを変換する。
(cygdrive とか)
MinGW 版だとその変換が行われないので、
ファイルを見付けられないケースが起こってしまう。

460 名前:デフォルトの名無しさん mailto:sage [2012/05/10(木) 23:34:59.47 ]
>>458
単なる趣味でーすw



461 名前:デフォルトの名無しさん mailto:sage [2012/05/10(木) 23:52:58.27 ]
>>459
なるほど


462 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 00:44:46.56 ]
む、ビルドできねえ
2008-06-12のcygwinじゃやっぱ古すぎて駄目なのか
それともどっか壊したのかなぁ
今更新規のcygwin入れるのもなんかアホくさいなぁ

msys+mingwに至っては2004-04-30だしw

463 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 01:17:10.41 ]
アドミン権限じゃないと書きこめないフォルダにインストしてるというオチだけはありませんように…


464 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 20:32:12.76 ]
./configure --enable-multibyte=sjisにするとコケるのか
デフォのutf8にすりゃいいけど自鯖のはsjisでやってるからなぁ

465 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/05/11(金) 20:54:25.68 ]
言語処理系によって文字コードの扱い方に関する思想は色々だけど、Gauche の場合は
「内部的には一貫した文字コードを使い、入出力の段階で変換、
場合によっては不完全文字列という形で保持できるけどそのエンコードが何かってのはプログラマの責任で。」
というもの。
なので、内部的に使う文字コードは最も大きい文字セットを持つ UTF-8 を選択した方が問題が少ない。
内部文字コードが Shift JIS の場合に UTF-8 から変換をかけると情報が落ちてしまう場合がある。
変換にかかる時間が惜しいほどシビアな条件とかであえて選ぶのなら話は別だけど、
惰性でやってるだけならこれを機会に変えてみるのもいいかもね。

それはそれとしてバグはこのスレに書くより WiLiKi なり Chaton なりを通じて報告した方がいいね。

466 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 22:03:28.49 ]
>>465
まぁバグじゃなくてmsysのバージョンが古いせいってのもありえるから
まだまだ要検証だけどさ
slibの場所も見落としてたし

一応0.9.1とか古い奴をビルドしてみたらこっちはできたみたいだけど
なんだろうねー

467 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/05/11(金) 22:19:04.26 ]
>>466
私の方でも試してみる。
今回から out-of-tree build が出来るようになってるからこういう検証が楽でいいね。

468 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/05/11(金) 22:27:49.25 ]
>>466
再現 (?) した。
ビルド中にドキュメントの処理のところでエラーになる。

../src/gosh -q -I../src -I../lib -lgauche-init /c/home/Gauche/doc/extract -jp -o gauche-refj.texi /c/home/Gauche/doc/gauche-ref.texi
*** SYSTEM-ERROR: couldn't open input file: "[conv(utf8->SHIFT_JIS) from \"c:\\home\\Gauche\\doc\\intro.texi": Invalid argument
Stack Trace:
_______________________________________
0 (with-input-from-file (find-file file) (cut filter pattern-in patt ...
At line 60 of "c:/home/Gauche/doc/extract"
1 (with-input-from-file (car a) (^ () (if *outfile* (with-output-to- ...
At line 141 of "c:/home/Gauche/doc/extract"

469 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 23:04:13.64 ]
>>467
out-of-tree build って何?

470 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 23:24:55.46 ]
>>468
そうそう、それ
ひょっとしてiconv.exeが消えてるかとも思ったけどそんなことも無かったし



471 名前:デフォルトの名無しさん mailto:sage [2012/05/11(金) 23:46:58.21 ]
doc/て文書だからあんま関係ないしスキップできないの?

472 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/05/11(金) 23:49:37.41 ]
>>470
port-name 手続を使っているところに問題があると思う。

> PORTの名前を返します。ポートがファイルに関連付けられている場合は、ポートの名前は
> ファイル名です。そうでない場合、ポートを説明する文字列が返されます。

"[conv(utf8->SHIFT_JIS) from \"c:\\home\\Gauche\\doc\\intro.texi" というのは変換ポートを説明する文字列だ。
UTF-8 ならば UTF-8 で書かれたドキュメントを読み込むときには変換ポートを通さないのでファイル名そのものを
得られていたが、 UTF-8 から Shift JIS へ変換する変換ポートを通すときにはその変換ポートの説明を得てしまう。
よって、それを元にファイル名を付けようとすると変なことになる。

473 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/05/11(金) 23:56:46.36 ]
>>471
makefile をいじればとりあえず無視して進むことは出来るよ。
でも、結果的に今回はドキュメント生成スクリプトの些細な問題だったからいいけど、
Gauche 本体の問題が顕現した可能性もあるから、
いずれにせよ検証はした方がいいってこと。

474 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/05/12(土) 07:27:08.46 ]
おっ! 修正されたみたいだね。

> chaton.practical-scheme.net/gauche/a/2012/05/11#entry-4fad58d1-d2ec6
> shiro utf-8以外のエンコーディングでconfigureするとdoc/のビルドに失敗するので、
> 修正した0.9.3.2を出しました。
> utf-8でコンパイルするぶんには急いでアップデートしなくてもいいでしょう。

475 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 15:05:52.82 ]
>>474
shiro さんってこのスレ見てんの?

476 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 15:11:13.17 ]
doc/のビルドに失敗って…
そもそもビルドする必要あるのだろうか

477 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 16:01:38.52 ]
>>476
おまいは doc 無しで Gauche プログラミングできるのか。

478 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 16:05:40.27 ]
Windows版はそもそもdocがない

479 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/05/12(土) 17:36:33.78 ]
マジで !? と思ったらあるやん。 share./info に。

480 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 17:42:48.37 ]
shareの下なんか見ない



481 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 17:51:50.88 ]
禅問答するためのスレではない。

482 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 18:13:32.83 ]
infoファイルってWindowsでどうやって見るの?

483 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 18:17:28.66 ]
色々やりかたはあるが、たぶんEmacsをインストールするのが一番簡単。

484 名前: ◆QZaw55cn4c mailto:sage [2012/05/12(土) 18:23:10.84 ]
うわさのtextinfoですか?

そんなものもあったなあ

485 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 18:24:21.78 ]
windows用の場合info2htmlかなんかに掛けて
.chmファイルとかにまとまってると便利なんだけど
もっと一般的な形式があればそれで
pdfじゃ多分読まない

486 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 18:25:46.24 ]
win使いのほとんどはオンラインのhtml見てるんじゃないかと思う


487 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 18:26:50.61 ]
ダイアルアップ時代はネット上のHTMLをローカルに保存して見てました

488 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 18:29:44.00 ]
そっか、ドキュメントルートをwgetしてローカルで見るのが早いわな
うん、解決

489 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 18:43:38.02 ]
winでemacsでinfo-lookupです。

490 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 19:42:49.92 ]
えっと、andoriodでも相変わらずemacsみたいな変態が幅利かせてる・・の?



491 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 19:54:40.81 ]
Androidって何の話?

492 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 20:09:35.94 ]
お、ビルドでけた
info.gzをhtmlにする方法ってなんかあったような気がするが忘れた

ttp://practical-scheme.net/vault/gauche-refj.tgz
ここリンク死んでるのな

493 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 20:47:12.54 ]
>>479
Windows版のshare/info/の下は全部gzで固まっててビルドしてくれる気すらない

494 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 20:49:59.78 ]
あ、wiliki動かしたらlibiconv-2.dllが無いって怒られちゃった
たしか前はそんなこと言われなかったと思ったのに
まー適当に拾ってきて入れたけど

やっぱりどっか壊してたんだな

495 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/05/12(土) 21:05:24.99 ]
>>493
違うよ。 それが成果物なんだよ。
元は英語、日本語を平行して記述した形式になっててそれを
Gauche で書かれたスクリプトで切り分けてその形にすんの。

496 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/05/12(土) 21:13:09.79 ]
>>492
gauche のソースツリーの中で doc ディレクトリに下りてから
make htmls
とすれば html 形式のドキュメントも生成してくれるよ。

497 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/05/12(土) 21:17:14.99 ]
>>482
だいたいは emacs から見る。
freedeai.180r.com/up/src/up11210.png
知りたい関数名がある箇所にポイントを持っていてちょいといくつかのキーを叩けば
そのままドキュメントを開いてくれるというのはすばらしい開発効率をもたらしてくれる。
索引から探すとかアホらしくてやっとれんので、html 版はそんなに見ないよ。

498 名前:デフォルトの名無しさん mailto:sage [2012/05/12(土) 21:58:29.29 ]
>>497
windowsのemacsを使ううえで、どうすればそうできるのですか?
EmacsからGaucheを使う - karetta.jp
karetta.jp/book-node/gauche-hacks/004640
今のところこれしか設定していません。

499 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/05/12(土) 23:25:24.18 ]
>>498
俺は leque さんの gauche-mode を使ってるなぁ。
www.katch.ne.jp/~leque/software/repos/gauche-mode/
ドキュメントがあるディレクトリとキーバインドだけ設定すればいいようになってる。

gauche-mode と言いつつ R6RS の一部に対応してたりするので、
俺は gauche 以外の Scheme を書くときでも gauche-mode を使ったりする。

500 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/05/12(土) 23:38:42.70 ]
>>475
わからん。 どちらかに断じることが出来る根拠はない。
ただ、ブログとかで Gauche 関連のことを書くと初心者の
しょーもない疑問にも応えに現れることがあるので、
割と広範囲に観測してはいると思う。



501 名前:デフォルトの名無しさん mailto:sage [2012/05/13(日) 00:43:09.37 ]
>>499
ありがとうございます。
うまく設定できました。

502 名前:デフォルトの名無しさん mailto:sage [2012/05/13(日) 15:33:07.96 ]
Kyoto.lisp は盛り上がりましたか?

503 名前:デフォルトの名無しさん mailto:sage [2012/05/13(日) 16:06:36.44 ]
msysの方はおkとして
cygwinの方はsignal.cのとこで死んじゃうなぁ
Scm_SigCheckのあたりから
SIGPWRがundeclaredとかってさ
threads=noneにすればいけるけど

ちなみにcygwin 1.5.25-15 gcc 3.4.4だす

504 名前:デフォルトの名無しさん mailto:sage [2012/05/13(日) 16:41:01.21 ]
cygwinてまだメンテされてんのか
なんか一時期まともにダウンロードできなくて見捨てた

505 名前:デフォルトの名無しさん mailto:sage [2012/05/13(日) 17:14:23.49 ]
最近はandLinuxとかが普通じゃないの?

506 名前:デフォルトの名無しさん mailto:sage [2012/05/13(日) 18:24:39.46 ]
Windows との連携というか距離感というか、そのへんで選択肢は変ってくる。
cygwin アプリからは Windows API も呼べるけど、
andLinux 上で動くソフトは完全な Linux アプリなわけで、
どっちが良いとか普通とかとは言えないと思う。

507 名前:デフォルトの名無しさん mailto:sage [2012/05/13(日) 19:31:52.46 ]
>>502
ざっくりいってshibuyalispが現地参加者80人ust参加15人で、95人
kyotolispが現地35人、ust50人で、85人ってところみたいだから、大成功の部類じゃね?

508 名前:デフォルトの名無しさん mailto:sage [2012/05/13(日) 20:07:46.92 ]
andというかCoLinuxって64bitだとまだ動かないんじゃないの?

509 名前:デフォルトの名無しさん mailto:sage [2012/05/13(日) 22:17:04.58 ]
linuxは乞食の集まりだから進化が遅い


510 名前:デフォルトの名無しさん mailto:sage [2012/05/13(日) 23:07:43.05 ]
今回のでどのプラットフォームでもglやらtkとかGUIで遊べちゃう
Gauche最強伝説だな
newlispで組んだpcypをGaucheで組みなおそw



511 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 16:09:00.86 ]
こんな所にpeca民が
配信楽しみにしてます

512 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 22:39:20.95 ]
>>511
配信なんてしませんよw
linuxでもwinみたいにpeercastが見たくて作っただけだからw






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<125KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef