一乙
lispの便利さを最近実感してきたので lisp使う人が減るのはむしろ嬉しい
>>4 その見解おかしいよ、廃れて嬉しいって感受性がヤバイよ
勝手にネガキャンしてくれる人のおかげで 便利なものの独占度が高まるなんて これ以上のことはない Lispを見えないように水面下で使えるようになるには 1年ぐらい準備期間いる気がする
他の言語には世界中の人間が 寄ってたかって作ったライブラリが山のようにあるのだが
そうだね その通りだよ
Lispの最大の欠点はまともなGUIライブラリがないことだな だれかgtkかqtをバインディングしてくれないかな
CLのライブラリは使えないの?
ほとんどの処理系にgtkとqtへのバインディングはあるはず。 誰かschemeのCLOSもどき上にCLIMもどきを作らないかな。もっともGUIビルダーもないし、外見がイケてないから使わない気がするけど。
GObject introspectionに対応すればgtk+3などに自動でバインディングできるようになったらしい。 lispぽく使おうとすると色々ラップする必要はあるかも。
LTkってどうなの
誰も話題にしていないけど、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.
竹内関数で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
Guile 2.0っていつの話題だよwほぼ一年前の話じゃん。 2.0.5のアナウンスがc.l.sに来てたぞ。
3.11でバタバタしていたからなあ。 あと自分はschemerじゃないし。
Guileメインの日本人が少ないからでしょ。
太るschemer
ソニックブー
Guile 2.0.5 を MinGW でビルドしようとしたけどうまいこといかへんかった。
>>22 少し試してみたけど、Firefoxでも動作してるみたいだよ。
処理系何使ってるんだ?やっぱりGauche? archだとguileだけ異常にシェア高い
周辺やwebの情報量から日本限定だとgauche一強のイメージ。性能も良いし、ドキュメントもしっかりしてる。実行ファイルを出したい人以外はgaucheを使ってるイメージ。 あと日本で流行るには日本語が通る、日本人の開発者が居る、あたりが重要。 外人だけだと日本語処理の細かい部分が微妙だったり、ユーザーライブラリは日本語が通りませんになったりする。 archといえばaurのgauche-git版だけど、ビルドの依存にgosh本体がないからビルド出来んぞ。
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版入れているなあ。
>>30 復活したっぽい。
Page Information
Title: Franz Inc.: Allegro Common Lisp (Japanese)
URL:
http://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
よかったよかった
racketの場合set-car!が使えないからスタックは簡単には作れない
スタックを作るのに set-car! が必要かい?
リスト持ってるだけの構造体(かレコード)かクラス定義すれば、 set-car!使わなくても簡単にスタック実装できると思う。
107 :ec2-50-16-143-240.compute-1.amazonaws.com : :2012/02/06(月) 01:56:49.34 ID:xBgBe+y50
qsocksのソースです
http://codepad.org/uyuG7Ovg ちなみにあたしは高校生です
勉強の息抜きに,あひるちゃんでも発狂させて遊ぼうと考えて作りました
主目的の達成はなりませんでしたが,他の変なのが発狂してて楽しかったので良しとします
プログラミング歴は3ヶ月くらいです.マクロとかクラスとか全然わかりません
SchemerのJKだと…? Coqを嗜むJKといい、日本始まったな。
>>40 なんでsxmlつかわんの?
べたで (format "~a ~a ~a ...") とかみてscheme使う意味あるのかと
Schemeって出力付近までS式じゃないとダメなん?
プログラム歴三ヶ月相手に何を言ってるんだ。
>>42 Schemeって言語自体がS式をベースにした単純なものであることが重要なわけで別にそこは全然いらないだろ
JKと聞いて喜び勇んで来たおっさんにそんな無粋な突っ込みしても…
FFTならあり得るんじゃないの?
flonumをboxしないで扱えるなら圧倒的に強いと思う。 型推論で競うならStalinじゃないか。R4RSで止まってるから実用プログラムを書くのは しんどいけど。
MacでStalinは動かないようです もうちょっとがんばってMacで最速と言い張れないか試してみようと思います
chicken-eggsにある移植版stalinならmacでも動くんじゃない?
c.l.sへの投稿乙。興味持ってくれる人いると良いね。
>>52 c.l.sって何の略?
アドレス、教えて。
ecl 12.2.1が出てたのに今気付いた。
enable-unicodeがデフォになった。
weak-hashが入ってdrakmaが動くようになった。
Archのextraはまだ前のVer。Aurのgit版は--enable-hoehm=を変更する必要あり。
>>53 Macは持っていないからスマンけど、ビルドが出来るか確認した?
chickenは移植性が高いし、ソースもschemeみたいだけど。
>>54 横レスだけど、たぶんcomp.lang.scheme。
stalin本家も移植性に気を使ってるコードだから、手間をかけずに移植できる気がする。 とはいえ型推論するschemeコンパイラの需要は多大なので期待しております。
lispやscheme系で10年後にも開発が継続しているのはどれだろう? gaucheは中の人が精力的に更新しているけど本人が倒れてしまったらどうなるかわからない 手堅いのはchickenやracketあたりか
それはわからないよ。 Gauche は確かに shiro さんが今のところはほぼ全てを支配しているけど、 拡張パッケージを見ると Gauche の内部構造を良く理解していないと 実現できないものとかもあったりするので、そんな人たちならいつでも 開発を引き継げると思う。 ある程度大きな開発コミュニティがあるものも、それはそれで分岐したり なんなりがありうるから現状の体制のまま 10 年後もあるかっていうと疑問だな。 統計的には、今まで長く続いているものはこれからも長く続く可能性が高いけど。
gaucheはソースが綺麗だから引き継ぐ人が出易いと思う。 R7RSが決まればscheme処理系毎の差異も小さくなるだろうし、そんなに心配はしてない。 racketは独自路線すぎてついていけない。 型推論するR5RS compilerが欲しいなー(チラッ R7RSといえばsyntax-caseだけは嫌なので、explicit renamingが採用されて欲しいな。R6RSがあんな美しくないミニ言語を入れた理由が分からない。
r7rsていつ決まるの?
>>64 > あんな美しくないミニ言語
解が見つからないまま publish に至っちゃった結果なんじゃないかなぁ。
Scheme マクロの出発点は「文脈によって意味が変わらないマクロを定義したい」
というところなんだろうけど、それがどうにも上手く行かない。
Common Lisp の symbol は名前を持つ object であるのに対し、
Scheme の symbol はちょっと変わった文字列でしかない。
つまり (eq? (string->symbol "foo") 'foo) => #t であることが保証されている。
ということは explicit renaming では
文脈によって意味が変わらないマクロを定義できない。
というわけで Scheme のマクロ変換の対象となるのは
マクロ変換時の情報を格納したオブジェクト(構文オブジェクト)とならざるを得ない。
で、マクロ変換時の情報って何よ?
ってなったときにどうにも合意できるものが無い。
合意できるものがないので
(datum->syntax identifier datum)
という identifier の中に隠れた(仕様書に無い)構文情報を
datum に付加できる手続きを仕様とすることでなんとなく合意された。
と推測している。
なんで scheme って、衛生的マクロに拘るの? defmacro の方が、シンプルかつ必要最小限じゃん?
defmacroはbrokenだから。どう使っても確実に動くというマクロが書けない。 運用上のルール (RnRSで定義されてるグローバル束縛をシャドウするローカル変数は作らない、とか) で回避できなくはないけど、そこで妥協したらSchemeじゃない。
やだ、かっこいい・・・
72 :
68 :2012/02/08(水) 16:45:06.95
>>69 ごめん、よく知らないんだけど、そもそもそういう思想なの?
刃物が危ないから規制する、みたいな感じに受け取れるんだけど…。
マクロの外側では普通に、グローバル束縛をシャドウするローカル変数、って(作っちゃだめだけど)作れるんだよね?
(define (let) 10) でめっちゃめちゃだよね?
なんで defmacro だけ目の敵に…。
>>72 let を変な風に定義しなおしたとしても、何も変えてない let* とか letrec とかは今まで通り普通に動いてほしい
でも let* がマクロで let に展開されると、変な風に変えた新しい let を使うと、正しく動かなくなってしまう
自分が let を使うときは自前の定義した let を使いたいけど、 let* とかがマクロの内部で使ってる let は元々の let を使ってくれれば、素敵だと思わない?
そんな気持ち
macroは式の変形なので、普通にやると展開時の文脈で評価されてしまう。 これに対してCommon Lispではgensymやパッケージ指定や命名規則で対応する。 schemeはLisp-1で名前空間が少ないのでCommon Lispと同じ対応は難しいし、直交しないので美しくない。 そこで定義時の文脈で評価する清潔なマクロを使用する。 R5RSのsyntax-rulesは純粋に定義時の文脈しか参照できない。 そこでR6RSに文脈を好き組み合わせられるsyntax-caseが入った。これは文脈を選べるので古典的マクロより強力。 ただsyntax-caseは通常のLispの文法に似ていないし、パターンマッチなど余計な仕事をしているので美しくない。 そこでexplicit renamingかsyntactic closureに変更しろという文句が出て来る。
個人的な感想だと、explicit renaming=gensym類似、syntactic closure=closure類似、syntax-case=Lispじゃない。
>>72 マクロじゃない、普通のライブラリは既にそういう分離が出来てるから。
自分のモジュールで (define car '(toyota prius)) したら、突然
標準ライブラリで内部でcarを読んでる関数が全部動かなくなる、なんてことはないよね。
(R6RS以降、もしくはR5RS+適切なモジュールシステムを使ってれば)。
マクロでもそれと同じことを保証したいけど、defmacroではできない、っていうこと。
>>72 > なんで defmacro だけ目の敵に…。
昔は手続きにも同じ問題があった(funarg問題)。
これに対してはレキシカルクロージャで一応解決した。
Scheme はマクロの方も解決しようとしている。
でもみんなが満足する解は今のところみつかってない。
>>64 >型推論するR5RS compilerが欲しいなー(チラッ
今がんばっています
Schemeの衛生マクロではアナフォリックマクロみたいな意図的に変数捕捉するマクロは書けないと聞いた。 まあaifくらいしか使わないけど・・・ 他にもdefmacroでしかできないようなことってある?
アナフォリックマクロは無理矢理スコープをねじ曲げて作ってるのを何ヶ所かで見たことがある。 多分、ググれば出て来る。
syntax-rulesでは面倒でもsyntax-caseなら普通に出来るじゃん。 R5RS処理系でも主要な物には外部変数捕捉が可能な健全なマクロシステムが入ってるよ。
>>81 defstruct みたいに prefix 付き手続きを自動生成するとか。
R6RS のマクロと defmacro の差ってことで言えば defmacro でないと出来ないことってのはほとんど無いと思うなぁ。
むしろ defmacro には出来ないことがあると思う。
一応
>>81 が期待している回答が syntax-rules と defmacro の比較と仮定すると、
>>85 の他に
マクロ展開時の数値計算みたいなのとかも syntax-rules では無理ってことになるんじゃないかな。
例えば (plus 1 2) を 3 に展開するみたいなのは無理。
(define-syntax plus
(syntax-rules ()
((_ 1 2) 3)))
みたいな感じで全ての数値の組み合わせを網羅するとかいった方法が無いでもないが非現実的だわな。
一段落目のあいまいな内容の感想文ワロタ
思想が違うものなので比較するのが難しい。
R6RS のマクロは defmacro に出来る大抵のことは出来るはずだけど、
展開時に使う関数は別のライブラリに分けなきゃならない制限があったりする。
(フェイズの分離がライブラリ単位。)
「defmacro は関連定義をひとつのパッケージにまとめることが出来る (が R6RS のマクロはそうではない)」
という点で能力の差と言えなくもないけど、定義したマクロを使う分には関係無いので単に記法の違いと言えなくもない。
一方で、
>>77 にあげたように「defmacro では完全に変数衝突を避けることは出来ない」というのは
定義したマクロを使う時にも注意を強いるという点で「defmacro には出来ないことがある」と考えた。
つまり、定義時の楽さや複雑さを置いといて、どれだけマクロの中に隠蔽できるか (マクロ使用時に見えないか)
で測ると
>>86 という意見になるわけだけど、そうじゃない解釈もできるので曖昧な文章になってしもたという感じ。
RacketのGUIをちょっとやってみたけど、 message%のlabelが全部表示されない だめだな
ふと気になったんだけど、schemeって代数幾何でいうスキームと何か関係あるの?
新宿ジュンク堂が閉店するみたいだ。残念。 Lisp関連書籍やものまね鳥なんか買うことが出来てお世話になった。
ぇえー残念 って、そういえば、三越自体がなくなるせいか まぁ仕方ないね
ジュンク堂自体はおなじ規模でどんどん出店してるから、また新宿に出来るかもね。
後釜のビックが書籍のフロアを頑張ってくれると有難いんだが。
新宿三丁目のあたりで良いからまた店出して欲しいな。
新宿は紀伊国屋本店があるから無理じゃね? それにしても紀伊国屋の3階はLisp関連書だけ外れの方に追いやられてるのは何故だ・・・
行ったことないから判らんのだが コンピューター書のコーナーが中央にあって、そこと別にLispコーナーが端にあるのか?
本店があって、(行政区画上は渋谷区だが)新宿南店もあるもんな。
>>101 一応コンピュータのコーナーだが概論的なコーナーだし
空間的に、ん?ここもコンピュータ書のコーナーなのかな?
というような微妙な位置にある。
105 :
デフォルトの名無しさん :2012/02/28(火) 23:26:45.58
WEB+DBの最新号、関数型言語入門を山本和彦が書いてるのを立ち読みして来た けど、LISPに関する文章が悲しくて泣けた 家に帰ってリスト遊び窓から投げ捨てた
S式(単一シンタックス)やマクロといったlispの特徴は二の次というか、あまり興味なさそう。 (マクロはAST操作やテンプレートがありますが) 前半でいえば、最近だと、逆に値の変更をプログラマーが管理してチューニングする方がいいと、clojureからclに流れる人もいるし、 haskellも性能出すのにチューンされた通常のデータ構造は管理して使ってるみたいだけど。 (ただclojureやscalaの影響で不変データ構造の高速化にチャレンジするライブラリ制作者も増えた気がする) 後半の型推論といえば、shenが(ry
>>108 Clojureもjavaのコードを動的コンパイルしてreloadできれば値の変更を伴うコード書くのもたやすいんだがなぁ
CLとくらべちゃうとどもならんけど
そんな凝った事しなくてもJavaのデータ構造使えばいいじゃないか 配列も使える
関数型言語入門でLisp大きく取り上げてたら それこそ頭おかしい。
関数型の利点として副作用がない事をあげてしまうと、constやimmutableが基本ですからと返される気がするのだけどな。 高階関数やマクロや型推論などのコードがスッキリ書ける技法を押した方が良いと思うのだけど。
マクロ、型推論、パターンマッチ渡しは 関数型言語と独立した概念。
独立した概念だろうと、副作用がない事は手続型への優位にはならないよ。 constは常識ですから、で終わり。高階関数でさえ取り入れられてきて、優位としては怪しい。 やはり対話環境も含めた言語全体の機能を押した方が良いと思う。
参照透明性についてちゃんと勉強してから偉そうなこと言えよwwwwwwww
なにそれ? 説明してもらえるかしら?
最低限でもCTMCPとか知ってれば、「副作用が無いのが優位」とまでは考えないだろうな。
「副作用(内部状態)を活用したプログラミング」「副作用に依存しないプログラミング」などがある。
副作用に依存した言語しか知らないプログラマーが、余計な副作用に悩まされるというのは判る。
大抵は
>>114 の、constなどで解決出来るから、ネイティブCでは難しいこと(DSLを作るとか)
が必要になったらLispなどが選択肢に入る、ってだけだと思う。
>>118 「ビットスライスプロセッサ」、「マイクロプログラム化」の意味ならWikipediaあたりで見てもらうとして、
意義は、ハードレベルでLisp対応マシンを作製した、という事。
現在の個人向けPCのCPUは、どちらかと言うとC言語対応。
C言語対応CPU + Cソース + Cコンパイラ
→ Lispコンパイラ + Lisp ソース
→ C言語対応CPU用実行ファイル
→ C言語対応CPUで実行、よりも
Lisp対応CPU + Lispソース
→ Lisp対応CPU用実行ファイル
→ Lisp対応CPUで実行
の方が速度的に有利だし、Lispの内部構造改善も容易。
>>119 >C言語対応CPU
そんなものがあるのか?
Cコンパイラを意識しながら進化してきてるって意味でしょ。
>>122 そんな事実はあるのか?具体例をひとつ。
どっか他所でも誰かに同じ議論吹っかけてたね。
インテルアーキテクチャでは命令をμopに分解してCPU内部で最適化したりもするらしいね。 最適化って処理に時間がかかるよくあるパターンを置換える処理だけど、 「よくあるパターン」ってやっぱ言語によると思うんだよな。 インテルはあまり詳細な資料は公表してないけど、少なからず言語を意識せざるを得ないはずではある。
らしい、とか、思う、とか、はず、とか言われても……
そろそろスレチ。
>>123 x86: enter命令やleave命令
SPARC: レジスタウィンドウ
MIPS: 大量のレジスタと少ないアドレッシングモード
Atmel AVR: (PIC あたりと比べて)Cで書きやすいように設計された
C だけでなく Pascal や FORTRAN あたりも視野に入ってるんだろうけど。
ARMv8 でタグ付きポインタ入らないかなと期待してるんだけど無理だろうな。
Cの実装でも用いられるスタックを使った環境フレームモデルは データの時間的局所性を自然に表現することになるから、キャッシュが効きやすいはず 原理的にCPUとは相性がいいんじゃないの?
山本和彦の文章立ち読みしてきたけど、まあHaskell宣伝の文章だからそっちのを 持ち上げるのは仕方ないとして、LISPでやって来たことは頃は何も分かってなかった みたいに否定的に思い出しているのがちょっとショッキングだったなあ。 俺もHaskellやろうかな?
心が揺れてるなら自分の答えを得る為にやってみてもいいんじゃね? 「俺も全然分かってなかったわ……」と結論付けるにせよ 「あいつがLisp全然分かってなかったわ……」と結論付けるにせよ
読んで疑問に思ったんだけど、 何でlispの頃はそもそも理解できなかったんだろう? 理解できてもいいと思うんだけど。 lispだから理解できなかったというよりも lisp経験を積んだから最終的に理解できたんじゃないかな
Lispに潜在的能力があるとしても、やっぱり言語仕様にないと利用者に伝わらないんじゃない? Cしか使ったことない人にGObjectを説明してもたぶんよく分からないだろうけど C++を一度経由させてみたらオブジェクト指向について理解が深まる……みたいな感じで ほかの言語に触れたからこそ目が覚めた、でも元々使ってた言語でも同じようなことはできた ってことはあるかもしれない
うん、lispやったから理解できないってのは 何か意図があるのかないのか この手の文章によくあるセンスの悪い誇張だろう
ある程度の宣伝口はしかたないでしょ。 Haskelは型付けの意識が強すぎて、書きながら考えるのがやりにくいのがイヤ。優等生向け言語。遅延評価もマイナス。
>>135 >遅延評価もマイナス。
メリットを上回るデメリットって何?
「人は副作用から離れては生きられないのよ」ってことじゃねぇの? 多分それに対する返しは「副作用に魂を縛られた人々よ」なんじゃないかと思うが。
>>136 あくまでも個人的な感想。言語の機能は目的に応じた選択だから良い悪いの評価は難しい。だからこそLispは言語が作れる言語になってる。
静的型の利点に性能をあげやすい点があるけど、デフォルトが遅延評価だとやりにくい。
もともとelisp以外にlisp書いてない人なんじゃないの? elispは開発環境として、プロトタイプ志向がすごく強くて、 コンパイラの性能も悪いから、ちょっと特殊だしね。
遅延評価は結構厄介だぞ 性能評価とか人が直感的に理解できる範疇をはるかに超えてる
でもまあMew作ったほどの人があれだけはっきりLISPにネガティブなこと書くという のはそれなりに影響を与えそうな気はする。
俺らが日本語を話すときにいちいち文法を考えたりしないだろ。 公式文書とか入り組んだ理屈を書くときにちょっと確かめたりするくらいだ。 合理的な理由があったとしても、メンタルモデルとかけ離れた言語は使い難いよ。 Lisp は言語の方を自分に (あるいは目的に) 合わせていける余地があるところが良い。 だけど、自分の裁量が大きいっていうのは自分の能力次第でグダグダにもなるってことでもあるわな。 Haskell は知識を体系的に表すことが強要される気がするけど、 それが使い難いと感じるのは、人の脳味噌が実際のところそんなに体系的に考えるのには向いてないってことなんじゃないかな。
>>137 副作用が良くない事のように捉える人が少なくないのに違和感あり。
そこは違和感ありだろと違和感あり
イスラム名のように違和感なく聞こえないこともない
でも、副作用については、厳密に副作用を禁止するより むしろ禁止しないほうがいいというのが、大多数の言語の主張だろ
たとえば薬とかの副作用は、基本、ないほうがいいものだから、手続き型ないし 命令型(プロシージャルorインペラティブ)のそれを「副作用」と呼ぶのには 問題があると言えばある。今更「仮想」とかと同じでどうにもなりそうにないが。
説教つうと、基本悪い事した時に正座させられた上でこれでもかと聴かされるアレだから、 宗教家のそれを「説教」と呼ぶのには問題があると言えばある。 のか?
代入なんか言ってみればmain effectだしな。
はっきりとコードの領域を副作用と純粋に分けられるかじゃないの haskellはいい線行ってるとおもうけど
副作用を目の敵にしてるんじゃなくて 副作用のある部分もない部分もプログラムの正しさを証明できればいいなっ という試みだろ
> 合理的な理由があったとしても、メンタルモデルとかけ離れた言語は使い難いよ。 もっともな話だけど、そのメンタルモデルとやらが本質を捉えていたかどうかだな。 継続みたいに慣れの問題にすぎないんじゃないかと思うよ
>>142 Haskellは知識を「体系的」と言うより数式と同じように「宣言的」に表します。
人の脳味噌にとっても宣言的に考える方が手続的に考えるより向いている場合があります。
宣言的記述である方程式を手続き的に記述すると鶴亀算になりますが、
方程式の方が鶴亀算よりずっとわかりやすいです。
>>151 はっきりとコードを手続的記述と宣言的記述に分けられるか、と言い換える事もできます。
Haskellは、その点では理想に近いですね。
>>140 だよね。
結局性能が落ちるコードを避けるために神経を使わないといけないなら、
eagerに対する利点が相殺されてるんじゃないのか、って思うわ。
個人的な印象としては、必要なときだけlazyにできれば十分。
その方が、必要なときだけeagerにするよりはずっと分かりやすい。
lazyは下手にボトムを回避しちゃうからねぇ
だからLazyじゃないMLを使ってればいいだろが。 なんでLispスレでHaskellヘイトをせにゃならんのだ。
ClojureもRacketもデフォルトlazyではないはず。
>>157 既に条件に合うLispって言語を使ってるのにML使えとか言われても。
それに、OOPを批判することとJavaを批判することが同じでないように、
Haskellを攻撃してるわけじゃないのは理解して欲しいところ。
あと、遅延でHaskellばっかり引き合いに出すと、多分Cleanさんが泣く。
WEB+DBマガジン立ち読みしたけど 関数型言語の定義を静的単一代入であること とかにするのはいくら何でもおかしいだろ もちろん、関数型言語の定義なんて存在しないことは わかっているつもりだけどさ
はぁ?
LispがいいならLisp使ってればいいじゃない。 静的型やらなんやらと、遅延評価は抱き合わせじゃない、というそんだけの話。
一応フォローしとくけど、最初から遅延評価が標準の環境の話しかしてないし、 Haskellや静的型の話をしてるのは別の人。勘違いで過剰に反応するのは勘弁して。
静的単一代入なんて言語あるのか?
HaskellerがLispを否定的に評価したので、HaskellよりLispが良いと思う理由を書いただけだけど。
>>165 SSAの訳だけど、あまりプログラミング言語の分類では使わない表現だね。
関数型言語の中間表現でよく使われる形式と等価ではあるんだが。
手続き型言語のIRにも時々登場するな LLVM IRもSSAだし、Google V8のJITCが使うのもSSAなはず
関数型言語のほうはCPSね。
>>165 Haskellerがそうなんじゃないの
SSA(静的単一代入)は中間表現に対して使われるものとwikiepediaに書いてあったけど
ちなみに、C/C++とかだって最適化の途中でSSA形式の中間表現に変換される
>>170 ×Haskeller
○Haskell
>>168 むしろ現代の最適化コンパイラでは
デファクトスタンダードの中間表現
(関数型)プログラミング言語の性質としては「単一代入性」と言う。
Haskellってすごいすごい言われているけど 現実では大した役に立ってないよね Haskellなんかわからないけど凄そうみたいな 印象操作に成功しているだけだろ
| ~~~~~~~~|~~~~~~~~~~ >( c´_ゝ`) | | >( c´_ゝ`) J >( c´_ゝ`) | ~~~~~~~~|~~~~~~~~~~ | >( c´,_ゝ`) | J >( c´,_ゝ`) >( c´,_ゝ`)
176 :
デフォルトの名無しさん :2012/03/08(木) 21:29:15.66
Haskellならではの便利なプログラム手法とか教えてくれないか? 当方Scheme使ってるが。
「う~~Haskell Haskell」 今Haskellならではの便利プログラムを求めて全力疾走している僕は 予備校に通う ごく一般的な男の子 強いて違うところをあげるとすれば Schemeを使ってるってとこかナー 名前は道下正樹
やめないか
λアッー!!
Λーッ!!
Haskell使っているだけで 自分は優れているなどと勘違いしてそう
Haskellは型安全で爆速だお
でも、実際使ったら彼女はできるし
関数言語信者って選民思想の人多すぎだよね Lips界隈でもポール・グレハムとかさ
でも実際、PHPとかJavaとか使っていたら その時点で雑魚確定だろ
使っている言語でプログラマの能力をを判断すべきじゃないよ
関数型言語の信者は中二ってことでいいけどさ、 俺が分からないからお前も分かっちゃ駄目ってのは日教組強すぎだろ
選民思想というより、言語の選定を真面目にしない人を馬鹿にするって感じだと思うよ。 Javaとか使ってても、きっちり技術的な観点からバランス感覚のある選択をしてれば、 無意味に馬鹿にされたりはしない。
Clojure使ってるんでJavaのコードも書くよ。
プロジェクトならJava使うほうが、lispなどの関数型言語使うより いい利点たくさん挙げられるけど
>>184 packrat parserは言語に依存する技術じゃないと思う。
Haskell以外の言語での実装も溢れてるし。
だけど、遅延評価使ってエレガントに書けるじゃん
そういう話なら、遅延評価を前提にしたコードが書けるのがHaskellならではなのであって、 流石に語弊あり過ぎ。 あと、Haskellならではでもないというか、Cleanでも同じことできないか?
MirandaでもCleanでもなくてHaskellならでは、って条件は流石に厳しくないか?
遅延評価なんて大昔から知られていた手法なのに なんで一般の言語で使われないのか? Haskell布教者の主張するような利点だけじゃなくて 欠点も多いからだろ
Miranda, Cleanは演算子ユーザ定義が無理じゃなかったかな。
>>197 一応、遅延評価デザインパターンってのはあります。
言語が直接サポートするのが少ないだけで。
>>199 それは分かるけどさ、言語が直接サポートしないのが一般的なのは
遅延評価と普通の評価のトレードオフを考えた上だろ
>>197 の主張はたとえばガベージコレクションにもそのままあてはまるよな。
Java が流行ったとたん、パッタリと消えたタイプのw
>>196 それは確かにそうかもしれない。ちょっと過敏な反応だったようで申し訳ない。
最近、何かにつけてHaskellが引き合いに出されることが多くて、ささくれだってたみたいだ。
>>200 そもそも遅延評価という選択肢を考慮すらせずに設計された言語も多いんじゃない
>>203 言語設計者がそんなに馬鹿な連中だとは思わないけど
遅延評価なんて大学で情報関係の教育を受けた人間なら知ってることだろ
>>201 遅延評価がこれから流行る可能性はゼロだけど
ほら、こういう風に図に乗る奴がすぐ出てくるんだよ
>>204 今どきの、情報教育ならね。
今現在主流の言語はほとんど、二世代三世代前の連中が設計したものがベースってことを忘れちゃいかんよ。
JavaとRubyは? それ以外の新しい言語でも遅延評価は採用されてない 欠点も大きいからね
いつまでスレタイも見ずに暴れるつもりだこのバカ?
だったらスルーしろよ
その「だったら」がよくわからない
新しい言語で遅延評価が採用されてないって、ガチで言ってるならお前は帰れw
>>208 欠点があることは誰も否定してない。
が、採用言語が少ないことは、欠点だけが理由じゃなく、考慮されないことが多かったからって話をしている。
もちろんJavaが先行評価なのは歴史的経緯なんだろうし、RubyについてはMatz本人に聞かないと分からんけど
そういう個々の話をしてるわけじゃないだろ...
>>213 欠点が理由だよ
考慮されないのは欠点が大きすぎるから
断定して断言 こういう微妙な悪文に気がつかない人って頭悪そう
欠点が欠点が、と喚くだけで、全く科学的定量的根拠が出せない奴もな
sicpから (define (gcd a b) (if (= b 0) a (gcd b (remainder a b)))) この関数を(gcd 206 40)で実行する 遅延評価と普通の評価でそれぞれ何回remainderを呼び出すのか? 答えは、遅延評価だと18回、普通の評価だと4回 遅延評価にどれだけ欠点があるのかよく示している例
>>219 問題はExercise 1.20
ぐぐれば問題も答えも出てくる
英語だけど
>>214 遅延評価に考慮すらされないほどの欠点があるの? どんな?
最近の情報工学を学んだ人間なら、遅延評価は普通に考慮に入れると思うけど
それほどの欠点があるとは知らなかったよ
マクロなんて大昔から知られていた手法なのに なんで一般の言語で使われないのか? S式なんて大昔から知られていた手法なのに なんで一般の言語で使われないのか? Lisp布教者の主張するような利点だけじゃなくて 欠点も多いからだろ
マクロは使われてる。S式じゃないとそれほど便利じゃないけど。 S式が一般の言語で使われないのは、S式を使いたいやつは皆Lispを使うから。 Lispに欠点が多いのは事実だけど、 マクロやS式が普及しないのは欠点とかそういう次元の話じゃない。
Lisp人口=S式使いたい人数か 少ないな
>>224 データ構造の表現だけなら、JSONやXMLみたいな
もう少し便利な品があるからね
エディタのサポートがないと書きづらい事も普及を妨げていたと思う。 最近は他にもそういう言語あるけど。
世間のビジネスの殆どは単純な事務処理だから、マクロやS式無しでも出来るだけの事。
単純な事務処理以外の分野でも 殆ど使われてないのだが
>>223 > S式が一般の言語で使われない
S式が使われた言語は LISP と呼ばれてしまうので LISP でないS式言語が存在し難いんだと思う。
>>229 汎用の言語でLispと言ったらCommonLispとSchemeとClojureくらいしか知らないんだが
そこに収斂するまでどれだけの血と汗と紆余曲折があったと思ってんだ!!
>>231 汗はなんとなく分かるけど、血と紆余曲折の具体的事例が思い浮かばない
Lispの方言の数を舐めるなよ。
234 :
デフォルトの名無しさん :2012/03/09(金) 15:11:04.31
Cygwin-1.7.8でGuile-2.0.5のビルドが通らない。libffiのテストが通らない。
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を使ってリストを作り直す必要があります? どうすればよいですか
ここschemeスレなんだけど
じゃschemeではどうやるか教えてください。
頑張れば書けるだろ
>>235 Common Lisp の闇である loop と format が大活躍する場面だな!!
Lisp族の総合スレだろ。
>>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)))
とりあえずloop系のゴリ押しか、再帰で書けそうだけど、 リスト処理だからmap系の上手い手がありそうな気がするな。
プログラム書いてくれるプログラムまだー
コンピュータが人間に合わせてくれるのではなく、コンピュータに合わせて人間の頭を 作り変えろ、というのがLISPの思想。
1960年代ではその考えは間違い。
lispのコードが読みやすいのはコード量が少なくなるから 少なくなる要因は1つの行に複数の関数を押し込めるから 同様のことは、オブジェクト指向のチェーンメソッドでやっている プログラマの目の動きを考えたとき、その視点は左から右、上から下に動くのが普通。 だから、チェーンメソッドはポーランド記法よりも理にかなっている。 けれども、チェーンメソッドである以上はオブジェクトでなければならない。 行数を短くし、1行に複数の関数を押し込めて自然な流れで読むためには、 逆ポーランド記法が理にかなっているといえる
>lispのコードが読みやすい 要出典
よって、逆ポーランド記法で書けるschemeが最も自然な流れで読めるという結論に至ったわけだが
>>247 慣れの問題なだけだからなー
XMLのタグよりよっぽど楽だし、構文の覚えやすさならLispの右に出るのってFrothくらいじゃないのか?
一語ずつ順番に読むならそうかもしれんが いくつか語句を先読みしてまとめて解釈するからな 逆ポーランド記法が読みやすいなら数学なんかもそうなっているだろうし
(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で書かれていたなら、エディタ戦争はまだまだ続いていたと思うね
>>248 schemeって逆ポーランド記法なの?
1 2 +
みたいな記述するん?
だからさー、Lispでうまく分業できる方法確立したら、 世界制覇、いや銀河を制覇出来るって何度言ったら… 初めてでした。調子乗ってすみません。
引数と関数のチェーンって逆の方向に伸びるから 逆ポーランドだと引数が不恰好になるよ あとリストのcarが関数の名前だとほんの少しだけマシンにやさしい
ちょっと何言ってるかわからないですね
>>255 そっか、わかりづらくてごめん
でもほんとにたいした内容じゃないからスルーして
>>252 逆ポーランド記法な scheme があったら、って話だと思う
つまり、
(5 (3 4 +) *)
こういうことだよね?
案外いいかもしれない
さらに Forth のように + や * が関数だと分かってると、上のは 5 3 4 + * って書けるだろうけど
シンボル a, b, c, d に関数や数値が束縛されているとき
a b c d はどこが引数でどこが関数なのか、普通の人間には理解できないかもしれん…
メソッドチェーンは上手く表現できるんだろうけど、こんな表現を使いこなせるのは、なるほど Jedi だな
さらにもし多値を返せて、それがスタックに複数の値として残ったりなんてしたら、とてもとても…
>>257 その書き方だとマクロが悲惨なことにならない?
(((a 0))
('foo 'bar (a 1 <) if)
let)
確かに… マクロとの相性最悪ですね だから Forth は、Lisp的なマクロじゃないんだろうな 改めてS式万能だなぁ。まさしく、Lispは「発見」されたんですね
映画コンタクトで解読できたのは巨大な括弧だった
>>259-260 マクロと相性が悪いというよりツリーと相性が悪いのでは?
LispはツリーであるS式が基本なので
逆ポーランド記法は採用できないと思います。
線形リスト:
ポーランド記法でまあまあ読みやすい。
逆ポーランド記法でとても読みやすい。
ツリー:
ポーランド記法でだいぶ読みにくい。インデントで改善できる。
逆ポーランド記法でかなり読みにくい。
グラフ:
ポーランド記法でとても読みにくい。
逆ポーランド記法でとても読みにくい。
言いたいことは分かる気がするけど「だいぶ」と「とても」と「かなり」の順序が分からん あと上のLispと関係ないフレーム合戦でみんな申し合わせたようにPerl6を黙殺してて泣ける
>>263 グラフ同士でも読みやすさに差があるからこうですね。
<<読みやすさランキング>>
線形リスト + 逆ポーランド記法
---- 壁0. 実行順の壁 ----
線形リスト + ポーランド記法
---- 壁1. 一直線の壁 ----
========<< 越えられない壁 >>========
ツリー + ポーランド記法
---- 壁2. 概要から詳細への壁 ----
ツリー + 逆ポーランド記法
---- 壁3. 階層構造の壁 ----
========<< 越えられない壁 >>========
グラフ + 逆ポーランド記法
---- 壁4. 実行順の壁 ----
グラフ + ポーランド記法
グラフって何の話? あと、完全に後置にさせると Forth とかでも悲惨になる。 THEN FOO @ ELSE BAR @ COND 1 2 + 3 4 + < IF Lisp系言語で最初の要素がオペレータになっているのは、 compile の前に macro expansion があるから。 macro expansion のためには完全に前置か完全に後置かにしないと都合が悪い。 FORTHで完全な後置にしなくて良いのは immediate word があるから。
>>262 >エターナルフォースnreverseすると死ぬ
これは一体…
268 :
デフォルトの名無しさん :2012/03/10(土) 17:27:10.53
www
>>266 > macro expansion のためには完全に前置か完全に後置かにしないと都合が悪い。
「都合が悪い」ってのは、評価時にさらに構文解析が必要になるのが問題になるってこと?
それってmacro expansionに限った話か?
>エターナルフォースブリザード 松本零士御大の漫画かと思いました
>>266 グラフ理論のグラフじゃね?
ツリーは循環のないグラフと言い換えられる(グラフはツリーを含む)
273 :
266 :2012/03/10(土) 22:25:57.43
>>270 macro expansion に限った話ではないです。例として挙げただけ。
「都合が悪い」のは、
例えば「第二要素がオペレータ」という決まりにしてしまうと
引数が0個のマクロを定義できなくなるとかです。
マクロ定義時にマクロ名を何番目に置くか定義できるようにすると、
(macro0 macro1)
のような式でどちらを先に展開するのか、とか。
>>272 グラフで記述された言語って何?という意味の質問でした。
BNF って構造としてはグラフだよね。
>>262 横レスだけど面白い処理だね
control stringとリストを作ってから最後にまとめるわけか
ただ、その処理だと文字列に~sや~aが現れたときにはエラーになってしまうような。
>>272 細かい話だが普通、循環のない無向グラフと無向を断わらないか。
有向だとDAGが循環はないがツリーでない判例になるから。
>>275 アイヤー。"~s"とかのこと忘れてたアルよ。無駄にnilの場合とか考慮してるのにね。
エターナルフォースnreverseは、
>>239 で闇とか言われてたので、そんなテンションだったとき、
途中で要素を共有してたのを忘れてnreverseして自分が死んだ。相手は死なない。平和。
結局loopとかformatとか良く使わないのであんま分かんなかった。アップルパイ美味しいです。
yamlに変換したら読みにくそう
>>278 S式が用意された理由は、データ構造というか構文木の表現のためだよ
だから本来のS式にとって、データ構造の表現は副次的な役割に過ぎない
逆だよ。 データ構造が先で、evalを理論的に説明するために、ソースコードを データ構造で表現する必要があって、そういうことになった。
元のレポート読んでないけど、Wikipediaの記述ではデータ構造が先だな。
数式処理をしたい 動的データ構造が必要 FORTRANでリスト処理ライブラリを書く リスト処理ライブラリで数式処理プログラムを書いてみた 数学やってたからλ式採用 万能関数eval発見 Lispの誕生 こんな経緯だったはず。 M式はコンスセルを意識しやすい表記として、かなり初期に考えられたはず。
あれ?そうなるとeval誕生前にはどうやって処理していたんだろうか
evalはインタプリタ。 コンパイラがあったらしいように読めたような気がする。
当初evalは数式処理をしていたが、万能関数ではなかった。
>>285 無茶言うな。
>>287 FLPL(fortran list processing library)辺りからの経緯の話なんだけど。
その前にもNSS listとかIPLとか先駆的な仕事があるんですよ。
いきなりLispやLispコンパイラが生まれたんじゃなくて。
うーん なんかよく分からなくなってきた 表や図でlispの歴史をまとめているのは無いのかな
IPL軽視されすぎ。 IPLなければLispのようなものはLispにはなってなかったはず。 FLPLは当初IPL-IIに翻訳される予定だったが、 McCarthyがFORTRANで記述できると助言したらしい。
>>276 うん、条件を見落としてた
ごめん
>>273 >>263 とは別人だから真意は分からないけれど
CLや特定のSRFIを含むSchemeだと#n=と#n#で循環も書けるから
念の為にグラフも比較対象に含めたんじゃないかと思う
質問です Gaucheです hash-table関数などのように可変個引数を取る関数に、自前のリストを出力する関数から値を渡したいのですが、形式をどのように変換すればよいのですか? e.g. '((foo bar) (piyo hoge))を (hash-table '(foo bar) '(piyo hoge))のように渡したいのです
>>292 aplly を使え。
それと hash-table の第一引数はハッシュテーブルのタイプ (比較関数) だぞ。
まちごた… aplly じゃなくて apply だ。 こんな基本的なところでタイプミスとはカッコわりぃ~ orz
Gaucheなら (use util.list) (alist->hash-table '((foo bar) (piyo hoge))) ちなみに、alistからの変換なので、元データの形式を '((foo . bar) (piyo . hoge)) としないと意図と違うことになると思う
アップリー
Lisper 死んでも誰も困らない この世のゴミ 早くGCに回収されろ
リリカルLISPっていう学習ソフトで詰んだので答えて頂けるとうれしいです。 問い:関数fを引数の第二要素を返す関数として定義しなさい。ただし引数は一つ。
(define f cadr)
(define (f 大好き おっぱい) おっぱい) これは糖衣構文だから、このレベルが解けないくらいの初心者なら、 (define f (lambda (大好き おっぱい) おっぱい) ) という感じで、糖衣構文を使わず、 defineによって f に 無名関数lambda を 束縛する、ときちんと覚えたほうがいいかも
303 :
302 :2012/03/19(月) 03:57:18.63
というか、俺もリリカルLISPでSchemeをはじめたんだけど ちゃんと途中に引数と戻り値については説明があっただろ そこは詰む場所じゃねーぞ
304 :
302 :2012/03/19(月) 04:19:41.21
なんで詰んでるんだろうと思ってリリカルLisp起動してちゃんと問題読んだ
>>300 を読み直した
恥ずかしすぎるから吊ってくる
かける言葉もないわ。コレは吊るしかない
ありがとうございます 何故か分からないけど(define f cadr) で解けました。 これは何かの省略した形ですかね。 ヒントを参考に(define f (lambda (x) なんちゃら))こんなので色々考えましたが 思いつきませんでした。
>>306 cadrを束縛してる手続きでfを束縛するってこと。
要はcadrにfっていう別名を付けた。
(define x 10)
とかと考え方は同じ。
ちなみに (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))でもいいと思う
×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))
そういうのこそマクロ使うんだよ
(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) みたいなのとか
>>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)
ごーしゅよくわからないけど適用順ぎゃくじゃない?
lambdaは無名関数でもありクロージャでもある 無名であることとクロージャは無関係
Lispスレ的には、昔のlambdaで作られる関数は動的束縛で、クロージャではなかった。 あと、無名関数という特別なものがあるとか考えるよりも、関数に名前が必要な言語と そうでない言語があって、名前が必要ない言語では名前を付けないと無名(匿名)関数に なる、という風に考えたほうが良いと思われ。
>>318 言葉の意味はとりあえず Wikipedia 見ておけばだいたいわかる。
http://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 ほれ
(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
SchemeとCommonLispは完全に時代遅れ これからはclojureの時代
Clojureは大好きだけどそんなことはないと思う
>>325 どんなところがそんなことないと思うのですか?
common lispとschemeのコードをシンタックス・ハイライトで色づけできる wikiを自分のサイトに設置したいのですが、何かおすすめはありますか? これまではgaucheのwilikiを使っていましたが、 wilikiではシンタックス・ハイライトを導入できそうになかったので。
>>327 google-code-prettify なら CL や Scheme に対応してるし、 WiLiKi に導入することも簡単だよ。
>>328 ありがとう。google-code-prettifyの使い方を見てみた。
javascriptとcssのファイルの読み込みはwilikiに簡単に追加できそう。
だけど、<pre class="prettyprint linenums:4">のように
pre要素のclassに任意の文字列を渡すことはwilikiではできないのでは?
>>326 JVMやCLIのような「ホスト」環境にアクセスするのは自然な事としている所はCLやSchemeとは違うと思う
それに、共有された状態を管理する手段としてロックを推奨しないなど、まだ一般に浸透していない設計上の判断がある
その判断が良いものかどうかは別の話だけど、少なくともCからC++のように
「コンパイラを入れ替えて、多少のエラーを直せば一応移行できる。それからより良い方法を学べばいい」というわけにはいかない
俺はClojureをCLやSchemeを過去の遺物にするような何かではなく、今までも沢山あった方言の一つだと思っていて
その上でClojureが好きで、長期間続いて欲しくて、他の言語にClojureが良い影響を与えたらいいなと思う
だから「CL・Schemeは死んだ、これからはClojure」みたいな主張には頷けない
>>330 括弧のネストの深さに応じて色が変わるのは
pastebinのサイトと同じっぽいな
>>330 プロパティを追加したいだけなら
wiliki:format-page-content メソッドをオーバーロードすればいいんだよ。
next-method の結果から sxpath で pre を探して sxml:add-attr でプロパティを追加。
直接ソースコードを書き換える必要はない。
>>329 linenums に関しては記法自体を追加しないと無理かなぁ。
>>333 ありがとうございます。
いろいろいじってみます
最悪の場合でも with-module を使えばどこへでも割り込めるのでソース自体を書き換えなければいけないってことはそんなに多くない。 でも、 internal define は置換えられないのでそれを覆う関数ごと置換えることになって面倒だからそういうときは無理せずに ソースに手を加えた方がよいかもしれず。
gaucheのfile-mtimeで取り出した時間をもとに y/m/d形式の日付の文字列を取得するには どうすればよいでしょうか? rubyでいうところのこれです Time.at(タイムスタンプ).strftime("%Y/%m/%d")
sys-strftime
>>338 まさにそのとおりの関数があったのですね。ありがとうございます。
340 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/03(火) 19:58:44.16
342 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/03(火) 23:42:23.42
>>341 SBCLとかclispとかでポータブルに書きたいです。
>>342 Common Lisp の話はなるべく Common Lisp スレへ行ってね。
Scheme の話は Scheme スレでね。
346 :
営利利用に関するLR審議中@詳細は自治スレへ :2012/04/04(水) 00:27:53.75
Lisp SchemeスレとCommon Lisp入門スレってどういう関係なの? ここはscheme専門スレなの?またはCommon Lispだけは禁止なの? 禁止なら1に書いておくべきでしょ あちらはCommon Lispの初心者用スレじゃないの?
>あちらはCommon Lispの初心者用スレじゃないの? お前にぴったりじゃん
>1 > Common Lisp、SchemeをはじめとするLisp族全般のスレです 自分も知らないうちにこの一文忘れて同じ事レスったことがある。
>>346 そこらは歴史的経緯というやつで…。 別に Common Lisp の話が禁止というわけじゃないよ。
ただ、 Common Lisp "固有の" 話は Common Lisp スレに集約した方が話が早いのであえてこっちに書かんでも、という感じ。
複数スレチェックするのめんどいから、全部ここでいい感じ。
Common Lispとか興味ないわ
CLスレが立った経緯は・・・ 昔、変なのがいたんだよ Ruby最高とかそんなのもいたw
RubyはLispの一種だしな
>>353 comp.lang.lispで延々怪気炎を上げ続けてるWilliam Jamesさんみたいな人ですね。分かります。
gavino もまだ暴れてるんだなスゲー。学生時代にも見た記憶あるから、10年近くtrollしてんのか。 海外のキ印は気合い入ってんな…
ジャンルは違うが日本が誇る偉大なる日下部師も負けちゃいないぜ。
>>357 それはどちらでみることができるのでしょうか?
今は主にTwitterかね
はつみみです
ということにしたいのですね?
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の場合どこからどう手をつければいいかわかりません
引数が何で結果を何にしたいのか 自分でしっかり決めてないからだと思うよ
俺以外にも
>>362 が何言ってるのか分からない人がいて安心した
(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)) の結果は?
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)))
すみません
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))
)
>>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))))
ありがとうございます。
質問です。プログラミングのコードって、Tabキーで解りやすくインデントがされますよね。 けれど、こういう掲示板にコードをコピペで張り付けると、インデントが全部消えちゃいます。 掲示板にコピペしても、インデントが残るようにするにはどうしたらいいんでしょうか。 ちなみにエディターはemacsです。
気にしないでいいと思いますが Pythonみたいなインデントに文法上の意味がある言語ならともかく どうしてもというなら とか全角空白とか
>>370 このスレの住人なら emacs かそれに準ずる高機能エディタを使ってます。
それにコピペして数ストロークのコマンドでインデントは再現できます。
emacs なら C-x h でバッファ全体を選択した後に C-M-\ ですね。
なので、少なくともこのスレではあまり考えなくてかまいません。
>>371 の示す手順も掲示板のクセ次第です。
にちゃんねるでは通用しても掲示板の全てで通用するわけではないです。
見る側のブラウザやフォント指定次第では幅が合わずにやっぱり表示が崩れたりする上、
実際に実行させるために空白文字に戻す必要が生じてかえって手間だったりも。
それも数ストロークのコマンドで出来ますけど。
最近ではコードの断片を保存するサービスがいくつかあります。
そういうサイトを利用して掲示板には URL を貼り付けるといったこともよく行われています。
主なところでは、
http://ideone.com/ http://codepad.org/ http://codetter.com/ https://gist.github.com/ でしょうか。
各掲示板によって (にちゃんねるなら各スレごとに) だいたいの運用方法が暗黙に定着しているので、
過去のやりとりを参考にして下さい。
Janeで見ているなら、レス番にアンカーがあればそこを右クリック なければ選択状態にして右クリック
374 :
370 :2012/04/17(火) 09:08:20.11
>>372 動作確認(C-M-\)をしました。感動しました。マジでありがとう。
>>370 2chでは行頭の半角スペース・Tab は何個あっても消える。
全角スペースならおk。
dat上では消えてないから、専ブラで行頭空白保存する設定で使えばインデント復元できる。
Guile 2 って Windows で動かんの?
Gauche0.9.3きちゃう? これでGauche-tkも動く~
Windows でスレッドが使えるようになったのが個人的にはかなりありがたい。 それと https 通信に stunnel が不要になったのもデカいかな。 リリースに向けた作業って地味に面倒でモチベーションを維持しにくいからそうすぐってわけでもないと思うな。
まじか。Windows環境でもスレッドうごいちゃうの?ビルド環境ないんで 0.9.3 は wktk しながら待たせてもらいます。
やだ…仕事はやい… ありがとー
なにこのキモイ流れ?
河童のキモ流れ … 河童が肝を洗っているとうっかり流してしまいそのまま死ぬこと。 転じてキモがられて社会的に死ぬこと。
ユーモアの欠片もないな
すいません、質問です。 '((a b) c d) と (list (list 'a 'b) 'c 'd) は、どこが違うんでしょうか?
>>386 C++ や Java の感覚で表現するなら前者はリテラルで後者はコンストラクタによってオブジェクトを作ってるイメージかなぁ。
文字列と文字列の入った配列ぐらい違う
前者は処理系によっては変更不可属性を付けられてもおかしくない
392 :
386 :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 っていう風に怒られます。
quoteは、渡されたS式をそもそもソースコードとして評価せずそのまま返す、という機能だよ
>>392 CLで書いているけどこんな形で変わってくる
ttp://ideone.com/nT1Tr quoteは読み込みのタイミングで一回だけリストを作っているけど、
listやconsなんかは評価ごとに新しいリストを作っている。
あと、もう一度symbol_1を評価してみれば分かるけど、
carやcdrはsymbol_1を変更してない。
わかんない人は処理系のソースを読もうぜ 仕組みが一発でわかるぜ このへんはLISPでLISP書いてもわかんないとこだぜ
>>392 > (car 'symbol)をやってみると、
> 1st argument symbol to car not List object っていう風に怒られます。
readした後には[ car | [ symbol | nil ]]と言う二つのcons cellになってる。
[ car | [ quote | [ symbol | nil ]]]ではない。
carの引数がsymbolというシンボルオブジェクトなのだから、リストでないと怒られて当たり前。
atomとlistとconsの違いも判ってないやつにquoteなんて教えても無駄
うん、まあ判らないだろうなということ教えてるよね
括弧で括った式 (関数 引数) この形式は関数の適用を意味する 関数と引数は一度しか評価されない 括弧で囲った式には、関数ではない特殊形式も存在する (特殊形式 引数) 特殊形式の引数が評価されるかは、その特殊形式によって決まる 引数の数は関数や特殊形式によって決まる 式(1 2 3 4)は、最初の要素が関数でも特殊形式でもないため、 評価するとエラーとなる 引用符の付いた式 '(1 2 3 4)は評価すると(1 2 3 4)が返る '(1 2 3 4)は(quote (1 2 3 4))と書ける quoteは特殊形式であり、 引数を評価せず、そのまま返すという機能を持つ
(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が返る
carの関数適用までが終わると、 式(car symbol_1)のすべての評価が終わったことになり、 結果を表示した後、次の式へ移るか、入力待ち状態になる この一連の流れをread-eval-print-loop(REPL)という
402 :
392 :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 となるわけね。みんな、ほんとうにありがとう。
本屋で「scheme手習い」と「scheme修行」がScalaのコーナーにあったんで Lispコーナーに移してきた。
俺も分離状態にあった『手習い』と『修行』をセットにしておいた。
プログラミングGaucheがscheme関連の良書だと気付かれてないのはどうすれば良いの
>>405 第4部がつまんないからだろ?
その他の部分はありきたりの言語入門書と大して変わらんし…
ありきたりと言うが、schemeにはまっとうな言語入門書が他にないじゃん
入門書は必要ないだろ
前にも書いたような気がするが、言語そのものに関する解説はケント・ディヴィグの「プログラミング言語SCHEME」が一番まともだと思う。 このレベルなら入門者にも充分に理解できる範囲だと思うし。 が、俺はだいぶん後になってから読んだので本当に入門に適しているかどうかわかんね。
「プログラミング言語SCHEME」が入門者用だと?ふざけんな! 若い頃あれよんで、あまりのストイックさに泣いたわ。
今なら『Scheme手習い』も『Scheme修行』も本屋に行けばあるだろうが。 これで岩波コンピュータサイエンスの『Scheme入門』も再版されたら文句なしなのだが。
岩波のcommon lisp入門は持っているけど schemeの方はどんな感じ?
>>410-411 手習いと修行は問題集みたいな感じだと思うけどな。
何もしらないところから手探りで問題を問いていく内に
Scheme への理解へも深まっている、というようなコンセプト。
それはそれで入門書としてよく出来てるいい本だと思うけど、
「言語」が前面に出てるのは「プログラミング言語SCHEME」
じゃないかという感じ。 やっぱ一番最初に読む本では無いかなぁ。
>>414 俺はネットで公開してる原著の方でScheme入門したけどすんなり読めたよ。
プログラミング言語そのものが初心者という人向けではないけど
Javaなり何なりわかってる人がSchemeを扱えるようになるには平易でいい。
>>378 リリースに向けた作業が大詰めに入ってる模様。
>>416 おー
msysで野良ビルドしちゃる
exeで勝手にインスコされるようなのは嫌なんよね
gaucheはぜひネイティブコンパイルを実装してほしい
以前、試しにJITコンパイラまでなら実装してみたけど、 保守コストとのトレードオフで採用は難しいみたいな話してなかったっけ? ほぼひとりで開発してる上に本業もあるわけだし、時間足りんでしょう。
CPUは1つじゃないからな ARMなんかは複数命令混ざってるから JIT専門業者がいたら丸投げした方がいい
ネイティブコンパイル信仰者は、まずは既存のコンパイラをちゃんと調べて、 どういうpros-consがあるかちゃんと示せばいいのに、なんで「ネイティブネイティブ」って うわごとのようにくりかえすだけなんだろうか。 StalinとかChickenとか既にあるんだから。
gaucheが良いけどネイティブでないのが不満なのでは。 自分用にgaucheで書いたのを、配布段階でD言語で書き直した経験がある。 一般人への処理系インストールサポートは無理だった。
動的型がどうしよもない ネイティブ化してもスレッデドコードに毛が生えた程度 ボトルネックをなんとかしないと個人でやる限界に近い
all in one な exe ファイルが欲しい、ということなら全く別の話だね
元のexe欲しいって話からは外れていっていると思うけれど、
>>424 そこに書いてある配布は、処理系自身の問題で。
>>422 の言っているのはアプリの話でしょ。
最近、スクリプト系は、
処理系自身がコード配布も含めたパッケージシステム持つのが多いよね。
WindowsもMacも、aptみたいに依存関係まで管理するオープンな機構がないから。
node.jsはnpmってのが出来た。
ただ事前にnode.js, python, gitをインストールしなければいけない。
schemeで全部書いて配布に含めることである程度解決できるんじゃないか。
R(r-project.org)は配布に含まれてる。そしてCRANからインストール。
最適化の話でなくてexeにするだけなら難易度はかなり低い gaucheもできたような つーかexeにしたいなんて誰か書いたか?
>>426 gaucheも gauche-package install <URL> で一応webから直接インストールできる。
依存関係はみてくれないみたいだし、CPANみたいに一ヶ所にまとまっててほしいけど。
やっぱり芋づる式にインストールしたいね。
処理系やライブラリをインストールしてもらうのって難しいからな。 CUIを使うと壊れると思ってやがる。GUIのパッケージ管理システムも欲しい。
Rは、R commandarってGUIラッパーもパッケージとして配布されてる。
py2exeならぬgo2exeか
>>426 そもそも
>>422 がネイティブコードが欲しい理由は処理系のインストールをサポートすることにネックがあると述べている。
ここではネイティブコードにするのは処理系のインストールの手間を無くす手段のひとつとしてやっているので、
処理系のインストールが充分に簡単、あるいは意識されないならばネイティブコードにする必要もなかったことになる。
確かにそれぞれ処理系の話とアプリケーションの話だけど根は同じだよ。
>>427 > 最適化の話でなくてexeにするだけなら難易度はかなり低い
> gaucheもできたような
mingw-exify だな。 コードを文字列のままくっつけるだけだけど。
速度が要る場合にはライブラリをプリコンパイルする仕組 (gencomp) を使えばちょっと速くなるし最適化も
普通にスクリプトをロードするよりはちょっと強くかかるはず。
> つーかexeにしたいなんて誰か書いたか?
exe を作らずにネイティブコンパイルする実行モデルに慣れてない人が
ネイティブコンパイル = exe を作ると理解したんじゃない?
>>432 exeじゃなくてhellじゃなかろか、extension名
mingw-exifyっての使えば数メガバイトで 普通のexeアプリのようにschemeアプリを配布できるの?
>>436 Gauche のライブラリがいずれにせよ必要なので単一の exe に出来るわけではない。
windows 用 gauche のパッケージに入ってる gauche-install.exe 等は mingw-exify によって処理して
作っているのでソース読めば意味がわかるよ。
delphiだって糞でかいランタイムが必要なんだぜ 気にすんな
まったくだ。
むしろ、Gaucheのバイナリ用ランタイム作ればいいのに 配布して終わりの形にできないと、作っても売れないのでおもちゃの域を出ない
dll 類はともかく、 scm ファイルが多すぎるな。 zip にまとめたアーカイブから直接ロードする機能の提案はあったので、コア付近で実装すれば scm を全部アーカイブしてしまえるかも。 zip からロードする拡張パッケージはあるけど、それが依存しているライブラリを zip に入れるわけにはいかないので、 本格的にやろうとすると Gauche 本体で対応する必要はあると思う。
でも、そこまでできるようになったら scheme処理系の中でも群を抜いて使われるようになると思う
でもdllは実行時までに別ファイルになってないとならないだろ? 実行前に展開してもらう なら、アプリとGauche一式をzipで配っても同じことのような気もするんだが。 どうしてもexeひとつがいいなら、自己解凍アーカイブにしてexeをクリックしたら 一時ディレクトリに展開してアプリ起動する、とか?
>>433 それが困る理由は、メモ帳で改造できちゃうこと
>>444 オープンソース派から見ればむしろ望ましい。
秘密がないと金にならない
現実は厳しいんだな
ゴミみたいなネイティブコードバックエンドなら ちょっと頑張れば実装できるだろうけど 難読化のために機械語を使うのは正しいのか……?
gaucheのwilikiで bad type of argument for str: #<<regmatch> ほにゃらら>というエラーメッセージが出たら、 編集ボタンが消えてしまい、そのページを編集することができなくなってしまいました データそのものは消えていないと思うのですが、どうすればよいのでしょうか。
ソース配布が嫌ってだけなら今でもVMコードをdllにできるでしょ (Gauche本体のビルド時にやってる) 非公式みたいだけど。
>>449 practocal-schemeのwilikiならこんな所に書いたりせず、Shiroさんに連絡汁
Gauche 0.9.3 キター
WinのPortable版が来るらしいぞ。配布がかなり楽になるな。
お、来たのか
おいらは今cygwinでビルド中 こいつが終わったらmsysのもやんなきゃ
>>457 windowsなら
>>456 を入れれば良くない?
cygwinでmingwのgaucheを動かす弊害って何かあるのかしら。
>>458 cygwin は間に入ってファイルパスを変換する。
(cygdrive とか)
MinGW 版だとその変換が行われないので、
ファイルを見付けられないケースが起こってしまう。
む、ビルドできねえ 2008-06-12のcygwinじゃやっぱ古すぎて駄目なのか それともどっか壊したのかなぁ 今更新規のcygwin入れるのもなんかアホくさいなぁ msys+mingwに至っては2004-04-30だしw
アドミン権限じゃないと書きこめないフォルダにインストしてるというオチだけはありませんように…
./configure --enable-multibyte=sjisにするとコケるのか デフォのutf8にすりゃいいけど自鯖のはsjisでやってるからなぁ
言語処理系によって文字コードの扱い方に関する思想は色々だけど、Gauche の場合は 「内部的には一貫した文字コードを使い、入出力の段階で変換、 場合によっては不完全文字列という形で保持できるけどそのエンコードが何かってのはプログラマの責任で。」 というもの。 なので、内部的に使う文字コードは最も大きい文字セットを持つ UTF-8 を選択した方が問題が少ない。 内部文字コードが Shift JIS の場合に UTF-8 から変換をかけると情報が落ちてしまう場合がある。 変換にかかる時間が惜しいほどシビアな条件とかであえて選ぶのなら話は別だけど、 惰性でやってるだけならこれを機会に変えてみるのもいいかもね。 それはそれとしてバグはこのスレに書くより WiLiKi なり Chaton なりを通じて報告した方がいいね。
>>465 まぁバグじゃなくてmsysのバージョンが古いせいってのもありえるから
まだまだ要検証だけどさ
slibの場所も見落としてたし
一応0.9.1とか古い奴をビルドしてみたらこっちはできたみたいだけど
なんだろうねー
>>466 私の方でも試してみる。
今回から out-of-tree build が出来るようになってるからこういう検証が楽でいいね。
>>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"
>>467 out-of-tree build って何?
>>468 そうそう、それ
ひょっとしてiconv.exeが消えてるかとも思ったけどそんなことも無かったし
doc/て文書だからあんま関係ないしスキップできないの?
>>470 port-name 手続を使っているところに問題があると思う。
> PORTの名前を返します。ポートがファイルに関連付けられている場合は、ポートの名前は
> ファイル名です。そうでない場合、ポートを説明する文字列が返されます。
"[conv(utf8->SHIFT_JIS) from \"c:\\home\\Gauche\\doc\\intro.texi" というのは変換ポートを説明する文字列だ。
UTF-8 ならば UTF-8 で書かれたドキュメントを読み込むときには変換ポートを通さないのでファイル名そのものを
得られていたが、 UTF-8 から Shift JIS へ変換する変換ポートを通すときにはその変換ポートの説明を得てしまう。
よって、それを元にファイル名を付けようとすると変なことになる。
>>471 makefile をいじればとりあえず無視して進むことは出来るよ。
でも、結果的に今回はドキュメント生成スクリプトの些細な問題だったからいいけど、
Gauche 本体の問題が顕現した可能性もあるから、
いずれにせよ検証はした方がいいってこと。
>>474 shiro さんってこのスレ見てんの?
doc/のビルドに失敗って… そもそもビルドする必要あるのだろうか
>>476 おまいは doc 無しで Gauche プログラミングできるのか。
Windows版はそもそもdocがない
マジで !? と思ったらあるやん。 share./info に。
shareの下なんか見ない
禅問答するためのスレではない。
infoファイルってWindowsでどうやって見るの?
色々やりかたはあるが、たぶんEmacsをインストールするのが一番簡単。
うわさのtextinfoですか? そんなものもあったなあ
windows用の場合info2htmlかなんかに掛けて .chmファイルとかにまとまってると便利なんだけど もっと一般的な形式があればそれで pdfじゃ多分読まない
win使いのほとんどはオンラインのhtml見てるんじゃないかと思う
ダイアルアップ時代はネット上のHTMLをローカルに保存して見てました
そっか、ドキュメントルートをwgetしてローカルで見るのが早いわな うん、解決
winでemacsでinfo-lookupです。
えっと、andoriodでも相変わらずemacsみたいな変態が幅利かせてる・・の?
Androidって何の話?
>>479 Windows版のshare/info/の下は全部gzで固まっててビルドしてくれる気すらない
あ、wiliki動かしたらlibiconv-2.dllが無いって怒られちゃった たしか前はそんなこと言われなかったと思ったのに まー適当に拾ってきて入れたけど やっぱりどっか壊してたんだな
>>493 違うよ。 それが成果物なんだよ。
元は英語、日本語を平行して記述した形式になっててそれを
Gauche で書かれたスクリプトで切り分けてその形にすんの。
>>492 gauche のソースツリーの中で doc ディレクトリに下りてから
make htmls
とすれば html 形式のドキュメントも生成してくれるよ。
>>475 わからん。 どちらかに断じることが出来る根拠はない。
ただ、ブログとかで Gauche 関連のことを書くと初心者の
しょーもない疑問にも応えに現れることがあるので、
割と広範囲に観測してはいると思う。
>>499 ありがとうございます。
うまく設定できました。
Kyoto.lisp は盛り上がりましたか?
msysの方はおkとして cygwinの方はsignal.cのとこで死んじゃうなぁ Scm_SigCheckのあたりから SIGPWRがundeclaredとかってさ threads=noneにすればいけるけど ちなみにcygwin 1.5.25-15 gcc 3.4.4だす
cygwinてまだメンテされてんのか なんか一時期まともにダウンロードできなくて見捨てた
最近はandLinuxとかが普通じゃないの?
Windows との連携というか距離感というか、そのへんで選択肢は変ってくる。 cygwin アプリからは Windows API も呼べるけど、 andLinux 上で動くソフトは完全な Linux アプリなわけで、 どっちが良いとか普通とかとは言えないと思う。
>>502 ざっくりいってshibuyalispが現地参加者80人ust参加15人で、95人
kyotolispが現地35人、ust50人で、85人ってところみたいだから、大成功の部類じゃね?
andというかCoLinuxって64bitだとまだ動かないんじゃないの?
linuxは乞食の集まりだから進化が遅い
今回のでどのプラットフォームでもglやらtkとかGUIで遊べちゃう Gauche最強伝説だな newlispで組んだpcypをGaucheで組みなおそw
こんな所にpeca民が 配信楽しみにしてます
>>511 配信なんてしませんよw
linuxでもwinみたいにpeercastが見たくて作っただけだからw
>>502 ちょっと、進行がぐだぐだだった感じはあったけど、結構おもしろかったよ
懇親会とかでも盛り上りは結構なもんだったし
lispから長らく離れてるけど、kyoto.lispなんてできてんね。 知らんかったわ。
...ここを長らくチェックしてるけど、以前より元気がないよね。lisp人口が へってるのかな
ここに限っていえばSchemeの勢いが3、4年前をピークに現象気味なんじゃない? 学習目的ってことだと最近Haskellが人気だし、Schemeの需要はそっちにいったのかもね。 書籍も売れてるみたいだし Clojure CommonLispで活動してる人を目にする機会は地味に増えてると思うけど
Haskellもやったけど、あれは窮屈な言語だなとおもったけど あの窮屈さが受けてるんだろうな。人間でもそうだけど、純粋すぎるのって 扱いづらい。恋愛になればやばい人に化けやすいしな。
いやそもそも2ちゃんねるが斜陽なんで
底辺が広がらないと何かと面白くないのは確かだが 2ちゃんねるの、しかもこのスレだけチェックして「元気がない」から云々とか言い出すのは 底辺に過ぎるだろ
比較的元気なclojureが別スレだしな。
山本和彦先生もlispではだめでhaskell で初めてプログラムに開眼したみたいじゃん
もともとインターネットの人でしょ。
clojureも元気ないよ。俺が時々ネタを提供する程度だもん。
他の指標だったらhatena のlispキーワードだな。
今でもmewはメンテナンスしとるし。
clojure を Lisp とか言われても納得できない
なんで?どうみても Lisp 系じゃね。 > Clojure
528 :
デフォルトの名無しさん :2012/05/22(火) 23:14:10.26
ClojureはLisp風味の*何か*って感じだなぁ。俺もあれをLispと呼ぶのには抵抗ある。
例えばどういうところでしょうか。 Worse is betterなオサレ感が嫌だという人は見かけましたが。
530 :
529 :2012/05/22(火) 23:21:34.36
補足ですが煽りではなく、clojureでlispに興味を持ったので、諸先輩方の意見が聞きたいだけです。
>>528 MultiLispとかQlispとかPaiLispとかConnection Machine Lispとか
Multiprocessor LispとかParalation Lispとかディスってんのか、コラ。
お前がどれだけのLisp知っとるというんじゃ。
名前にLispって付かないParcelとかまだいろいろあるんじゃ。
きりないけどもう一つMultiSchemeだけ挙げとくわ。
>>531 何故に並列拡張されたlispはlispじゃないって主張だと思ったのだろうか
clojureを既存のlispと比してlispっぽくないっていってる人が考えてるんは並列かいうと違うでしょ
もっと文化的なものか慣習的なものか、言語設計的なものじゃないか
自分はClojureも別にLispにしか見えない。Arcとかも異端に見えるんだろうか。 Common LispやSchemeに至るまで数多くのLisp方言が存在するわけだけど、 それらと比べても、Clojureって言うほど異端かな。
末尾再帰の最適化がないから!! とか?
Clojure全然流行らないな Clojure以外の言語は雑魚ってな感じに 猛プッシュされてたのに
>>536 JVMを利用する言語の中じゃ本体のJava以外でもっとも人気あると思うんだが
Scalaよりも活発だし
>>523 え、じゃああのスレでネタ持ち込むのおまいさんと俺だけ?
>>528 純粋なS四季だけじゃなくて、データ構造に余計な別カッコを使うなってこと?
clojureは風変わりなLispとしては、 空前絶後の流行り方じゃないか? もちろんScheme先生には完敗だけど。
scheme流行ってんの?, sicpが有名なだけじゃなくて? 日本でもclojure採用してる会社は聞いたことがあるが, schemeってあるのか? あったら知りたい
また俺流定義か。
>> 530 言語いじりの人 勉強用のおもちゃにするには実用指向すぎー。Java知らないと楽しめないー ;; あんなのlispじゃない ↑ 中間層の人 ああ, Javaねえ. Javaの仕事が嫌でLispで遊んでんだけどな. でも良いかもね. ;; ちょっと興が乗らないlisp ↓ 仕事でアプリ書く人 手軽に書けるしJavaで書くよりずっと良いし割と好きだわー. 他の方言もライブラリあれば使うけどねえ. ;; 新しいlisp
>>とレス番の間にスペースを入れるのはやめてくれないか
専ブラ使ってるのに誤爆してるしププ
>>544 かちゅ~しゃだと隙間空けられると困るのよね
かちゅーしゃってまだ現役だったのか。昔使ってたような気がする。
あ、今pecaでlispの配信やってる
Gauche0.9.3.3きた
>>550 すぐにバグフィクスしてくれるのはありがたいね。
delayとlazyの違いが今ひとつわからない
SICPスレは荒れていたのでこちらで質問します。 新卒未経験からこの業界に入り1年たったのですが、上司から廃れない知識を 身に着けたならSICPのようなものを1冊読むといいといわれました。 scheme処理系を調べてところ「Dr racket」がありインストールしたのですが、 方言?が多すぎて何を選択すればよいかわかりません SICPの課題を行うには「language」を何に選択すればいいのでしょうか?
R5RS
SICPはもう廃れてるぞ
その著者の過去に書いた本、昔はすごいなぁと思ってたんだけど、今見ると そのボリューム自体がある種のはったりで、騙されてるんじゃないか、という 気が今は少しするんだよなぁ。
>>558 Schemeと書いてるから、多分手続きっぽいLispっぽいコードはほとんど
無いんじゃないだろうか。
lispのリスト処理はcdr down, cons up、分解して再構成がパターンだから かたまりをかたまりのまま処理してかたまりを返してるイメージはないなぁ。 map、写像って言葉も集合の元から別の集合の元への対応のことであって 集合から別の集合への対応ではないし。
>>561 言語の違いじゃなくて、単に選択したライブラリの違いだな。
>>560 Scheme処理系は道具として利用してだけなのは、その短いアブストラクト読むだけでわかるしね。
558は文句言うだけが能のバカ。
564は日本語もまともに書けないバカ。
盛り上がってまいりました
lispはじまったな
他の本の書評みると 内容は悪くないけど衒学趣味がうざいって書かれているな そうのが気にならない人向けか
女王陛下「lispが駄目ならhaskellを使えばよいではないか」
お菓子言語Haskell。
schemeの方言でnullとnilを使い分けてるものなんてないよね? CLではnullは関数みたいだけど
大昔からnullは、引数がnilならt、でなければnilを返す関数だ
schemeならnull?じゃね? んでnilはないんじゃね?
(define nilpo? (lambda (nil) (null? nil)))
Scheme は null も nil も予約語じゃなかった記憶が
Schemeに予約語などない
一部のSchemeには#nilというものが
Schemeって begin は予約語じゃなかったっけ?
いくつか予約語があるけど、実際に予約語として扱ってる実装はあまりないんじゃないかな。
580 :
デフォルトの名無しさん :2012/06/15(金) 23:09:40.02
質問させてください。 処理系はgauche0.9.3です。 循環二次元リスト(トーラスのようなもの)を作成する手続き(make-field)を書いています。 (circulize)はリストを循環リストに変換する関数です。 (define circulize (lambda (lis) (begin (set-cdr! (last-pair lis) lis) lis))) (define makeField (lambda (w h) ($ circulize $ make-list w $ circulize $ make-list h 0))) これを実行すると[e.g. gosh> (makeField 3 3)]、 #0=(#1=(0 0 0 . #1#) #1# #1# . #0#)が出力されます。 本来ならば #0=(#1=(0 0 0 . #1#) #2=(0 0 0 . #2#) #3=(0 0 0 . #3#) . #0#)としたいのですが、すべて同じものを参照しているようです。 make-listは初期値を参照渡しで受け取っている?ようです。(自分でもよくわかりません) makeFieldのうまい書き方はないでしょうか。 下手な説明ですが、どうか御教授ください。
make-list wの結果にlist-copyをmapするというのはどう?
>>581 循環リストに対する list-copy は停止しないよ。
(define (make-field w h) ($ circulize $ map circulize $ make-list w $ make-list h 0))
($ circulize $ map circulize $ map list-copy $ make-list w $ make-list h 0))
$て何だよ 右結合ってことでいいのか? こういう半端な演算子もどきは廃れる
Haskellからの輸入だねえ かっこが減らせるのは素晴らしい
$ってマクロかなにか? Gaucheでしか動かないとか?
589 :
デフォルトの名無しさん :2012/06/16(土) 16:27:36.46
やってることは数十年前のスーパー括弧の再発明 数十年経っても同じ事を繰り返すLISPer 括弧の呪縛から開放されるのは無理だな
590 :
580 :2012/06/16(土) 16:33:09.48
>>587 Gauche 特有と言えばそうだけど、
R5RS の範囲内で書けるマクロなので、
便利だと思ったら別の処理系で動かすことは出来るよ。
FreeBSDのportsでGaucheがコンパイル中にエラーで止まるよ
freebsdのportsをupdateしてみたけど まだコンパイル成功しない
うちx86-64だけど、普通にビルド通るよ
素数夜曲って発売は今日なのかな?26日なのかな? ブログ系は今日だし、Amazon他ネットショップ系は26日だ…どっちなんだろう?
>>596 取次の日付と、書店店頭の日付の違いらしい。
八重洲ブックセンターは19日に一冊入荷していたとか。
21日午後に行ったら、その朝開店直後に買われてしまっていて入手できなかった。
書名のオヤジギャグが原因で回収されたのかもしれない
amazonで頼んでいるけど、発送された形跡がないんだよなあ
秋葉原の書泉に何冊かおいてあった。
買った人いないの
いないよ
そうか、居なかったんだ
いるよ
こういう人が気に入りそうな本だということはわかった
いつもの中村正三郎氏じゃないか
SICPの準備に読むのに良い本なのか。
まだ5章の途中だが、変なラブコメがない数学ガールって感じかな。 後半はラムダ算法やら継続やら楽しみなものがいっぱいだ。
> 中学生くらいから社会人まで、一般の人がプログラムを書き、 > 動かすことで、数の不思議、美しさを実感できるようになるには、 > 別のアプローチがあるべきだというので、書かれたのが本書だ。 > だから、SICPに挫折した人には、ぜひ、薦めたい。 SICP読んでないけど、数の不思議、美しさを実感する本なの?
ま、言ってる通りの内容だとすると まともな書評が出るには早すぎるな
中村さんはアフィの為に絶賛してる感が否めなくてね。
素数夜曲はオリジナルが300ページなくて、今回のは900ページ近いからLISP 解説だけですごい増ページだな。 3600円も割安に感じる。
ページ当たりの価格で本の価値を判断する男の人って素敵
濡れる
自分も書店で見たときの割安感で買った。 一万円近くするのかなと思ったら三千円台だったので安いと。 もともと高校生の時に著者のオイラーの贈り物を読んでたののもあるし、 内容が濃くみえたのと文体が相性良さそうだったのもあるが。
他に読みたい本があって買っちゃったから買えなかった。 分厚いね。 素数の話はとっぱらって後半だけなら持ち運びやすいのに。
素敵夜曲かと思ってたが、よく見たら素数だった。
その手の本のどこかでつまったら 一冊にしがみつくより専門書にあたれとだけ言っておく
人間とは現金な物なのだよ
「虚数の情緒」もSICPも読んだし「素数夜曲」も楽しみ Amazonからまだ来ない
せめて読んだ感想を書いてくれ 届くの楽しみとかtwitterでやれ
専門書、専門書ってどうせ大したもの読んでるわけじゃねえんだろw
あのボリュームで数学書で3千円台って確かにインパクトあるよな、実物見るとw 俺も最初8600円かと思って見直した
scheme でloop macroに相当するものってないのでしょうか
SRFIに...と思って検索してみたら、ないんだな
ループとは違うけど、強いて言えば srfi-42 で定義されている内包表記マクロが似たような用途で使えなくもない。
おおう、改行が…
(define hoge 0) (define (fuga a) (match a (hoge #t) (_ #f))) こう書くとmatchの中のhogeにaの値が束縛されてしまって関数fugaに何を渡しても#tになってしまうんですけど このhogeを外に定義しているhogeとして認識させる方法はありますか? 一応((? (pa$ = hoge)) #t)は考えたのですがだいぶ冗長な気がして 環境はGaucheです
loopなんてミニ言語をSRFIに入れてどうする 処理系によっては似たライブラリがある
まあ内部DSLの作りやすさはLispの特徴ではあるな
>>631 > 処理系によっては似たライブラリがある
似てるだけじゃ困るってのが、SRFIの(ry
Common Lispの奴をそのままパクればいいじゃん、って感じのものは SRFIないのかな、もしかして。
>>630 match の構文としては ? を使う他にない。
あらかじめ
(define (hoge? x) (= x hoge))
とでも定義しておけば
((? hoge?) #t)
と書けてちょと簡潔に見えるかも。
オブジェクトと比較するために述語として与える必要があるのは、Scheme では比較の方法が多様だから一般化が難しいという理由があると思う。
ここでは = で比較したいということだが、 string=? を使いたいときだってあるだろうし、eq? で充分だってときもある。
主要なものだけ特別に用意するという戦略も有りだと思うけど、なるべく一般化したがるのが Scheme 風だからな。
>>634 LISPが嫌だからSchemeやってるのに、オフィシャルの仕様がLISPに追従してもらったら困る
はぁ?
小学生の喧嘩かよ。 「嫌いな美代ちゃんと仲良くするから困る」pgr
一から十まで説明しなきゃ駄目か? 素数夜曲でも買って嫁
美代ちゃんって何時の時代の名前だ もうおばちゃんになってそう
素数夜曲いい本だな
生協で見かけて、余りの厚さと価格で買いそうになったが、 1/3くらい立ち読みして、初歩的な内容ばっかりで買うの止めた。 5,6年前なら喜んで買って読んだんだろうけど。
>>635 なるほど、納得しました
丁寧な回答ありがとうございます
じゃあ初心者にはよさそうだな
amazonから届いたのでざっと目を通したが schemeの処理系としてgaucheを使ったって後書きに書いてあるね 前半部分(約350ページ)は理論的なことをざっと話す感じで、 紙とペンで読み進めるのを想定しているか。 後半部分(約500ページ)は前半部分の実装+アルファで、 R5RSに機能を追加していく形をとってる SICPでいうなら理論的な説明と実装を完全に分離したような本、かな
もうちょっと持ち運びを考えた装丁にして欲しかった
Gauche か Racket/R5RS を推奨って書いてあったような。
gaucheはscheme処理系の日本の雄!って紹介して、 racketはオールインワンのscheme処理系って位置付けてる。
BiwaScheme
結構良書だな 思ってたよりも大作だよこれは
'('(1 2 3) '(4 5 8) '(5 6 7) '(8 9 0)) を '('(1 4 5 8) '(2 5 6 9) '(3 8 7 0)) に変換したいんですが、どう書けば いいんでしようか?
(map list hoge) でいけないか? 少なくともGaucheなら、mapは可変個引数だったはず
653 :
652 :2012/07/04(水) 21:22:45.25
余談だが確かHaskellのData.Listにはそのためのtransposeという関数があったはず Lispにもあるかもね
654 :
652 :2012/07/04(水) 21:33:04.33
連投失礼
>>652 訂正
(apply map list hoge)
ですね
((1 4 5 8) (2 5 6 9) (3 8 7 0)) という結果になればいいんだろぅ? 老婆心ながら (define hoge '((1 2 3) (4 5 8) (5 6 7) (8 9 0))) ;; 外側のquoteひとつだけで良いんだぜ ;; 俺の使ってる処理系だと内側のquoteつけると結果が違ってしまうぜ (apply map list hoge) ;; >654 さんの答をもういちどそのまま書いてやったぜ~ワイルドだろ~
(hogeが)よく分からなかったんですけど、 (apply map list '('(1 2 3) '(4 5 8) '(5 6 7) '(8 9 0))) と書いたら ((quote quote quote quote) (1 2 3) (4 5 8) (5 6 7) (8 9 0)) となりました。
applyとmapの意味は分かってんのかと小一時間
>>655 > ;; 外側のquoteひとつだけで良いんだぜ
久しぶりにschemeを使うことになって、
忘れていました。簡易スプレットシートが
欲しいんですが、演算処理機がガラケーしか
無くて、BiwaSchemeを使っています。
659 :
651 :2012/07/05(木) 06:54:32.91
auアプリが死滅しているのでBiwa様には
助けられています。
回答レスして下さった
>>652 さん、
>>655 さん、ありがとうございました。
いつもニコニコあなたのマシンに這い寄る処理系、ニルラトホテプですっ♪
Guile 2.0.6 が来てた。
>>661 なんでいきなり創価認定なのかと思ったら大作つながりかwww
いちいちわかったアピールするほど野暮なもんもないな
rayfill: 素数夜曲、ページ数とか装丁考えたらあの価格じゃ利益どころか赤しかでないんじゃないかと心配になるレベル sasagawa888: 素数夜曲、著者の印税を心配してしまう。今時こんな立派な装丁で、ページ数から行ったら3600円は安すぎる。 読者は限定されるんで売れたとしてもベストセラーみたいなわけにはいかない。儲け無しでいいのだ!という豪快さを感じる。
そろそろページ数以外の感想も聞かせてもらいたいな
厚い方が売れるってエンタメだろ
買う側にとっては安いに越したことはないけどな。 このご時世、専門書と言えども5000円を越えるようだと俺は躊躇するかもしんない。
GEBと同じで(あっちは高いけど)エンタメだろ。 きちんと全部読み切ることを前提として、取捨選択に筆者の断腸の 思いが垣間見られる、必要なことの抽出に努力した教科書、という スタイルの本ではない。
>>666 前半は過去の本の内容と同じだから、労力は半分だと思う
げぶっ
p.341の注釈を見てカッコとコッカの由来をはじめてしったわ これだけで100円分はもとをとれた気がする
昨日特車二科整備班人民民主戦線事務局派かっこ左派のかっことじの急進派分班何を言ってるんでしょうか?もとい「鉄目の団」に買収された「ツナギの会」の戦闘員と思しき数名に襲撃を受けて善戦むなしく袋叩きにあい負傷して意気消沈で寝込んで
仏ほっとけ神構うな 合掌
素数夜曲84ページの「愛しい単位元は唯一つ」の意味がわからん
夏休みのお供に高校の数学教師が勧めるに違いない
素数夜曲、ちゃんとSICPで挫折した人向けに、そこまでを繋ぐ役割と内容のスコープを明確にしているのはいいね。
>>677 読んでないから文脈がわからんが、
xがある代数システムGの単位元で、かつ、yもGの単位元ならば、x=y
ってことなんじゃないの?
一見あたり前のことだけど、ある性質を持つ対象は全て同一の対象である、
こういう特徴を持つことになる性質かどうかをはっきりさせることは、
数学と計算機の間を行ったり来たりする時に重要。
そういう代数的な話はスレ違い
三角形の中線は一点で交わる
パターンマッチでリストと連想リストを判別する方法はありますか? ($ <list>)と((($ <string>) . _) . _)ではダメでした
パターンマッチは標準じゃないからどのライブラリ/処理系か書いてもらわないとわからないんだが。 連想リストはリストの特殊な場合だから、連想リストかどうかだけチェックすればいい。 Andrew Wrightのパターンマッチ (GaucheやRacketなどで使える)なら ((key . val) ...) で連想リストにマッチする。変数keyにはキー位置の要素の リスト、valには値位置の要素のリストが入る。 普通のリストでもマッチかけたければその後に (item ...) だ。 空リストを連想リスト扱いにしたくなければ ((key1 . val1) (key . val) ...) だな。
>>684 ((key . val) ...)で期待する動作になりました
ありがとうございます
...を使えばよかったのですね
今さらになりますが環境はGaucheでした
元の質問が「パターンマッチで」ということなので余計なお世話かもしれないけど、 パターンマッチを使わないで判別するとしたらこんなのはどうかな。 (define alist? (every$ pair?))
懐かしいネタだな。
ジジイは何見ても懐かしいんだよな そろそろ死ぬんじゃね?
いや、元ネタのブログの記事掲載日時見れば分かるけど、 それ何ヶ月も前に発表されて話題になってた記事だし。 TwitterとかでもかなりRTされてたから結構みんな知ってるんじゃない? むしろ、何でスラドが今更取り上げてんの、って俺も思ったよ。
それが(今の)スラドクオリティ
今日はlisp2012の締切り日か
締め切り伸びたらしいな。
投稿数が少ないとか?
696 :
デフォルトの名無しさん :2012/07/24(火) 12:43:34.51
698 :
696 :2012/07/25(水) 18:38:32.62
>>697 まじですか。昔々は50万円以上してた気がして個人では買えないと諦めたんですが。
頑張れば使えそうですね。
個人で買おうとセールスにメールしたけど反応なくて困ってた人がいたね。 スパム判定でもされて届かなかったのかもしれないが。
型を強制指定して動作速度あげれるのって typed racket chickenの型指定記述 他に何あったかな 処理系ごとに書き方ちがうのなんとかしてほしい
そういうのを求めてるのに何故Common Lispを使わないのか。 と本来言いたいところなんだけど、文法はさておき、対応状況はまちまちだよね。 fixnumくらいなら大抵どれでもサポートしてるけど、それ以上になると。 SRFIで提案してみるとかすれば、Schemeでも将来的には統一されるかもよ。
typed racketって動作速度のためというか、静的検査のための型システムじゃない?(速度も上がってる?) occurence typingっていう若干依存型っぽい感じの型システムで実は凄い奴だよ。local type inferenceも付いてる
以前ちょっと触ったときは、 Typed Racket は寧ろ速度落ちてたけどな。
typed racket ってcommon lisp の型指定と 類似してるわけでもないのね
いや、raco exe でコンパイルした奴。 もっともテストコードは #lang typed/racket (: tarai (Integer Integer Integer -> Integer));#lang racketの場合、この行は除去 (define (tarai x y z) (if (<= x y) y (tarai (tarai (sub1 x) y z) (tarai (sub1 y) z x) (tarai (sub1 z) x y)))) (display (tarai 14 7 0)) だけど。それぞれ10回くらい time で時間計ると、明確に #lang racket の方が速い。
racketのことは知らないんだけど、そのコードだと外部からtaraiが 呼ばれる可能性があるから、taraiエントリポイントでの型チェックは 外せないんじゃないかなあ。あとtaraiが再定義される可能性があるから、 再帰部分をローカルエントリポイントに置き換えることができない。つまり taraiが呼ばれるたびに型チェックが入っちゃう。 ローカル関数を定義してそこで再帰するとか、モジュールをうまくいじって taraiが外から決して呼ばれず再定義もされないってことがコンパイラに はっきりわかるようにしたら、速くなったりしない? Stalinみたいにコンパイラがプログラムの全てを知っているって処理系なら、 mainエントリポイントから辿ってtaraiエントリの型チェックが不要であると 結論できるだろうけど。
(define x 12.3) (define lx (list x)) ;;lx = (12.3) (set! x 23.4) ;;lx = (23.4) こんな感じのポインターのlistみたいなのつくろうと思ったら delay使うしかないのでしょうか
>>710 リスト使うとか
> (define x (list 12.3))
> (define lx (list x))
> (set-car! x 23.4)
> (map car lx)
サンク使うとか
> (define x 12.3)
> (define lx (list (lambda () x)))
> (set! x 23.4)
> (map (lambda (f) (f)) lx)
逆に、delay使っちゃうと、最初にforceした時点で値が確定して
それ以降の変数の変化が追えないような気が・・・
(delay (list x)) にしたって一度forceしちゃったらその後xにset!しても効かないよ。 具体的に何をやりたいかだけど、グローバル変数が変化したのに追従させたいなら (list (lambda () x)) とサンクにしておいて値が必要になる度にサンクを呼び出すとか。
R6RS の識別子マクロを使えばこんな表現もできる。 (define lx (list 12.3)) (define-syntax x (identifier-syntax (_ (list-ref lx 0)) ((set! _ a) (set-car! lx a)))) ;; lx = (12.3) (set! x 23.4) ;; lx = (23.4)
質問というか興味というか あるリストに大して何度か連続でmapやfilterを適応していきたいとき 一行で書くと大変なことになるからいくつかにわけることになると思うんだけど そのわけかたのセオリーというか作法みたいのを知りたい 単に一行をインデントでわけるのか局所変数を介してわけるのか 複数の部分適応の関数にして最後に合わせるのか 自分で思いついたのは上の3つ
つ let*
次の展開の予想。Gaucheユーザが$を推す。
>>714 俺は名前を中心に考える。
関数や、結果を格納する変数に妥当な名前を思い付く単位で分ける。
lisp(scheme)でCのpointerに相当するものはないってことでいいの?
ポインタが作れたとして ポインタの参照先なんて管理してたらポインタの速度面のメリットが吹っ飛ぶ つまりポインタのソースがGCされたらぬるぽ
昔の統合開発環境持ったLisp処理系はpeek/poke持ったのが多かった。 これでデバッガやウィンドウシステムやネットワークシステム書いてた。
(define x (list 12.3)) でおk
>>722 set-car!
すればいいのか。しかしracketはset-car!ない
Racket は mutable な構造は隔離してるからな。 (require racket/mpair) (let ((lst (mlist 1 2 3))) (set-mcar! lst 4) lst) とかになる。
よくみたら>711ですでに出ていた
びっくりしたw
>>721 今でもCL処理系なら内部的に(C言語的な)ポインタ使えるのあるよ。
速度が必要なところはそれで書いてる。GCされ得るものを指す時はGCによる移動を
禁じておかないとだめとか、型のチェックをしてくれないとか、Cのポインタより
使い勝手悪いけど。出てくるコードはまあまあ。
Scheme でも FFI をそなえた処理系はそれなりにある。 共有オブジェクト (ダイナミックリンクライブラリ) に繋げられればほぼ何でもアリなわけだけど、 Gauche 拡張モジュールの dyncomp みたいにコードの中に C を埋め込むようなのとか面白いな。
FFIは話がぜんぜん違う。
レイヤが違うので直接的には比較できないものではあるけど、 小さなライブラリを用意しておくだけでメモリのどこにでも書き込めるので、 そう違う話でもないと思うけどな。
peek/poke系は
>>727 が書いているような処理系のサポートが重要。
> 小さなライブラリを用意しておくだけでメモリのどこにでも書き込めるので、
こんなんじゃどうにもならない。
そうなの? N88-BASIC にあった peek/poke のイメージがあったからあんな感じのかと思ったけど、 もっと高機能なものなんかな。 ちょっと解説してくれんか。
たとえば get-addr 構文で変数のアドレスを得ることができるとする。 で、次のようなプログラムを考える (define addr (get-addr obj)) (define n (peek addr)) (define c (cons 0 0)) (poke addr n) addr 番地から値を読んで書き戻しているだけだから、普通は何も起こらない。 が、cons の場所で GC が動作し、objの表すオブジェクトが移動されてしまうと、 poke はなんだかよくわからない場所に値を書き込んでしまうことになる。 Boehm GC はオブジェクトを移動させないから、 gauche は生のポインタをユーザに使わせるのは比較的簡単。 copying GC を使ってる処理系だと一工夫必要。
普通の頭ならschemeオブジェクトとRAWメモリエリアは隔離するでしょ 変数のアドレスなんか得て何するつもりだよ
「変数のアドレス」っていうとまたニュアンスが変わってくるんだけどね。Cでは変数は
メモリの位置についたラベルだからそのアドレスを取ることに意味があるけど、Lisp系では
変数は値についたラベルなので、そのアドレスという概念自体がない。内部的に固定された
入れ物が用意されてればそのアドレスは取れるけど、そういうものがあるとは限らないし。
>>710 は、本当にやりたいこと(多分間接参照をかますことだろう) を「ポインタ」と言ってる
ところに混乱があるんじゃないかと思った。Lispでは間接参照には別のやり方がある。
それとは別の話で、Lispオブジェクトのアドレスを得て何かしたい、っていうのも、無くはない。
構造的なバイナリデータをLisp世界では(simple-array (unsigned-byte 8) (*)) で
扱ってて、たまにバイナリとしてアクセスしたい。しかもforeign typeのオーバヘッドを避けたい、なんて時。
もちろん処理系の内部に依存しまくったコードになる。
>>734 Schemerでldb@Common Lispは知らないとか?
今はldbをsetfできるけど、昔はsetfはldbで実装されていた。
Common Lispの歌にそう書いてある。
Lisp自身で自分を言語拡張するにはこういう機能があると便利。
737 :
デフォルトの名無しさん :2012/08/02(木) 11:49:34.64
>Common Lispの歌 ?
>>736 GCと共存しつつメモリいじるなんて開発者自身ぐらいしか危なくてできないだろ
LISPの言語拡張ってそういう意味じゃないし
>>738 > LISPの言語拡張ってそういう意味じゃないし
そりゃ今時のライトユーザ感覚。
>>738 C# にだって fixed ステートメントがある。
処理系側でその程度のほんの少しの配慮があれば充分に安全にできるんじゃね?
マクロが出来る前の Lisp はあたらしい構文が必要なら処理系をいじるのは普通だったときいたことがある。
それを Lisp の上からしたくなるのは自然な流れだし、Common Lisp の仕様に逆アセンブラが含まれているのは、
アセンブリまで下りていく必要があったということを示していると思う。
そういったことが Lisp 的でないという考え方は、
十分な処理系 (とそれを動かせるだけの高性能なハードウェア) がある現代だから言えることじゃないかな。
「ほんの少し」じゃ済まないだろ。
過去形で語られてるけど、今でも普通にdisassemble使って色々調べますし。
少し古いテキストを読むと普通のPCとLISPマシンが別物のような印象を受けるけど、 普通のPCでLISPを動かせるようになった理由ってただ単にメモリが増えたからでしょうか?
それもあるけど(昔、たとえばBSDは仮想記憶があるからという理由で、Lispを 走らせるために好まれた)、速くなったというのもある。
>>743 Z-80(8bitCPU)でもLispは動いてましたよ。
組み込みのエディタもあったし数式処理も出来た。
>>743 ハードウエアがLispに追いついたから。
半世紀近く掛かりました。
Lispはそもそもそんな大きいリソース使わないのも特徴なんだけど? LispマシンやCommon Lispともなるとある程度必要だけど。 それでも初期のMacLispやSymbolics程度なら90年代前半には追い付いてる。
LispマシンてLispを効率よく実行するために設計されたハードだったけど、 今はもうどのPCでも十分速いからすっかり廃れましたっていう感じでは。
LispマシンはFFIもあったけど、基本的には単一言語指向。全部Lispが万歳。 けどC登場以降は、多くの言語の実行環境がCで書かれるようになり、 汎用基本ライブラリもCで書かれるようになってくると、 UNIXみたいなCを基本としてどんな言語でも使える環境の方がよくなってきた。 速度の問題よりどっぷりLispがいいのか、 もっと別の言語も局面に応じて使いたいのかが分かれ目になってる。 そもそもMacLisp全盛期は汎用機の上で書かれて、 数値計算もFORTRANより速いケースがあったくらい。 もちろんそれはLispマシン登場以前の話。 昔は専用ハードウェアが必要だったというのは全く事実に反する。
mewの人にディスられてもハスケルにはいかないのね
つまみ食いのアプリ屋なんで。
(let* ( [x (list 1 2 3)] [w (append x x)] ) (display y)(newline) (set-car! x 11) (display w)(newline);=>(1 2 3 11 2 3) ) なっとくいかない
(display y)の行はタイプミスだから無視してくれ
appendを自分で書いてみ
>>755 そういえば処理系作った本人が append のコードを思いつくのに3ヶ月かかったという話を聞いた気がする
Prologだったかも知れん
(defun append (x y) (if (null? x) (copy-list y) (cons (car x) (append (cdr x) y))) こうですか、わかりません ><
>>753 最後のリストの複製は作らないからだよ
appendの仕様に複製かそのままかが含まれてるかは知らないけど
高速化のために専用ハードウェアやったけどRISC(とx86)の高速化についていけず 処理系の進化とあいまってメリットなくなりましたくらいだな
Lispはガラパゴス 世の中から隔絶された島のようなもん
Lispはあらゆる言語の進化に影響を与えた。 LispのDNAを含まない言語は少数派。
数式処理ではlisp最強は今も変わらない
>>753 >>758 SchemeもCommonLispも、appendの最後の引数は複製されず共有されるのが仕様。
>>760 自動プログラミングはLISP系が主流だから、コードを吐き出したプログラムまで含めれば、LISPが超主流だと思う
ガラパゴスレベルじゃなく異星人レベルだったか
ガラパゴスガラパゴス 蝉ってうるさいよな
数十年前に囓ってみたもののさっぱり分からなくて 以来disり続けている爺さんとか想像すると気が遠くなるな
>>765 太古の地球に異星人の船が飛来する。
地上に降り立ったLisp型宇宙人は黒い液体を飲み、
自らのDNAを地球の処理系に拡散させる
llvm って Scheme とは相性悪いの?
scheme2llvmとかいうのを1年前に見た記憶ある 今探したら消えてる(作ってた学生が卒業してサイト消えたっぽい)
Schemeのバックエンドとしてってことなら動的型付け用途には相性いいってことはない 適切なバインディング作るかLLVM-IR吐いてLispでDSL作る時にバックエンドとして使うのは悪くないはず
gauche 版の plagger みたいな感じのやつってないかな。
>>765 なんせ
made by secret alien technology.
っすよ
オーム社さん邦訳は(チラッ
翻訳の過程で萌え絵になりました
pic.twitter.com/KZH3robx lispがないよ
>>771 仮にLLVMをバックエンドとしてSchemeを実装するとき、
継続はどうすればいいのだろう?
やっぱり、ネイティブスタックではなくて自前のコールスタックを
持たざるを得ないのかな?
Stalinは継続を諦めているんだっけ?
>>777 そうだろうね、自分で最適化アセンブラ書くより楽かもしれないが手間はかかると思う
以前調べたときは一旦生成したコールスタック内の関数書換も出来なかった
Stalinは知らない
Stalinはreturnに変換できる継続しか扱わないと書いてあった記憶ある
今更ながらに素数夜曲を買ったがめちゃくちゃ読みにくい、というか持ちにくい orz epub版真剣に検討してほしい
でかい本はばらして読むのが常識でしょ
そんな俺々ルールをさも当然のように語られてもなあ
なら読みにくいの我慢して読めよ
>>780 スターバックスで12時間居座って読破した
迷惑な奴だな
全部データ化してiPadみたいなので読むでしょ普通
むしろ、あの量を電子化した状態で読破したら目が死なないか?
無駄口で倍に膨らませても分かりやすくなるわけではないが 人によっては分かった積もりにはなりやすい
トンカツでも食パンでも分厚いと喜ぶのは昭和一桁
goshをperlなどの代用として使ってる人は本当にいるのか
goshじゃないけどもっと小さい処理系で計算機の代わりにしてる
>>790 perl を使ったことがないけれども、
他の人だったら perl を使うんだろうなという用途で俺は使ってる。
アメリカのハッカーの必須言語はlispとpythonとperlらしい
もうperlじゃなくてjavascriptになってんじゃね?
待ちguile
待ちnode 待ちhtml5
Perl使うってワンライナーって話じゃなくて?
awkとsedがやってる操作を楽にやるためにperlを使う gaucheじゃ無理だと思う
もしかするとLEDじゃなくてネオンランプかムギ球かもw
あとパンチカードには80桁の呪いがかかってるから、LISPマシンなら紙テープかも。 いずれにしても速度が遅いから、ローエンドマシンでなければ磁気テープを併用したはず。
さすがに 1980年代でネオンランプとかニキシー管とかはないと思う。普通の LED だろう。 一足違いで 1990年代にお世話になったが、当時の学生実験では、あー、あれだ、TTL 74Nと LS がちゃんぽんだったなあ‥‥。
>>796 国へかえるんだな おまえにも家族がいるだろう
外部記憶はフロッピーでしょ。 ForthやPrologも一番下が8inch片単のドライブでしょ。当時の標準。
Lispに特化した小型携帯端末作ってほしい 今まで作ったAI全部入れてどこまでSFになるか試したい
>>807 カシオが昔、AI-1000ってLisp専用のポケコンだしてた。
つ CASIO AI-1000 というかスマートフォンでいいんじゃ…
環境に依存しないでシステムのエンディアンを判別したり特定のエンディアンで読み書きする手段はありますか? srfi-56がそれっぽいかと思ったのですが実装している実装系がほとんどないみたいなので
stackoverflowみたいなLispの質問サイトが欲しいところだな。 2chだとアクセス規制で書き込めなかったりするし、過去ログを集積したり検索するのにも向かない。 そういうのを作ったら移動してもいいという人はいるのだろうか。
>>807 SFになるような自作AIっていったいどんな・・・
お願いだからネットに繋いで世界戦争とか起こさないでよね。
RFIDタグにLISPのコードを焼き付けてほしいと思ったことはある
ラムダだっちゃ
>>812 Lisp 専門というわけではないけど、Qiita とか QA@IT とかいったサイトでは駄目かな?
Scheme なら WiLiKi もある。
ANS-prog は今までに Lisp の話題が出てないなぁ。
SFレベルのAIはないだろうけどAIってどのくらい進歩してるのさ? アポーのsiriなんかもAIなのか?
>>821 分野と目的をものすごく限定すれば2001宇宙の旅のHALと同じくらいにはなってる
>>818 これがあれば万々歳なのですがR6RSはまだあまり使える環境がないというイメージがあります
実際はどうなんでしょうか
>>823 俺が把握してる R6RS 処理系は
・ Larceny
・ Mosh
・ Racket
・ IronScheme
・ Ypsilon
・ Guile (Version 2 以降)
・ Petite Chez Scheme
・ sagittarius
あたりかな。
sagittarius はマクロまわりが不完全だったり Ypsilon は多値の扱いが微妙だったりだとか、
それぞれに癖があるけど、癖を理解すれば基本的にはどれもよく出来た処理系だと思うよ。
一人で悶々とScheme処理系を作ってると脳が溶けそうになる
>>824 ありがとうございます
イメージは単なる思い違いだったようです
bytevectorを使おうと思います
大学の演習でScheme処理系をSchemeで作ったことがあるけど、そのときはS式を構文解析してevalするだけというオチだった 懐かしい
>>812 2ch系個人板サービスのわいわいkakiko
(規制緩めで)に一票。専用ブラウザを
使えば濃い検索もできる。
明後日から3日間休みだからラップトップパソコンと参考書だけ持って別荘に籠ってCommonLispかSchemeの勉強しようと思います どの参考書がいいでしょうかね
本なんかより処理系ソース読むのがいい
そうか? 実装から入ってしまうと抽象的概念を抽象的に考え難くなってしまうような気がする。 処理系のソースを読むのがためになることは否定しないけど、 まずはまともな文章を読んで学んだ方がいいと思うなぁ。
まともな文章ってどれよ?
>>830 >ラップトップパソコン
懐かしい響きだな。
3日間で終わるような本はないなぁ。。
On Lisp と Let Over Lambdaでいいんじゃない?
Lispにスキルは必要ない Lispは数式をそのままプログラムにするという狂った思想そのもの 必要なのは数学的な思考力
数式をそのまま・・・? 構文木ではなくて・・・?
Haskell の方が数式そのままっぽくない?
prefix, infix, postfix, monomial, 全てfomulaです。
λ計算だろ。まあ、本当は数式+推論だろうけど。
>>833 これわかるわー。Lisp/Schemeには実装レベルとは別の抽象化された独自の世界があるよね。
それこそが他の言語とは違うLisp/Schemeのおもしろさだと思ってる。
「この論文のS式、そのままの形でevalすればいいんじゃね?」という理由で誕生したLisp
論文上はS式でなくM式
明日はノートパソコン持ってスタバ行って開店から閉店まで粘って素数本を読破してきます 席がなかったらコメダ
CやSQLのポエムは見たことあるけど、LISPはないな。
Common Lisp触ったことないならM. Hiroiさんのページとかよかったりしないか
xyzzy だったっけ。移植されるといいのですけど
kanrenよりもschelogの方がいろんな処理系に実装されてるのは 単に実装しやすいから? それとも使えるから?
単純にschelogの方が古いからだろ kanrenなんてこのスレでも初出じゃないか? kはキムチ臭いのも影響してるかも
852 :
デフォルトの名無しさん :2012/08/16(木) 11:15:18.85
どこが凄いのかわからん ごくありふれた類のもんだと思うが
JavaScript上で動くというと、BiwaSchemeとか結構話題に挙がるよね。 あと、RacketとかChickenにJavaScriptへコンパイルするためのライブラリがあった気がする。 他にScheme2Jsとかも。 Common LispだとParenscriptは割と使われてる印象。 ちょっと名前は忘れちゃったけど、ブラウザ上で動く対話的でEmacs風な環境も見掛けた覚えが。 興味があったら色々触ってみると面白いと思うよー。
Parenscriptはエラーチェックとかしてくれるわけじゃないし、変換されたJavascriptのコードをチェックする必要がある。 結局Javascriptを知ってないといけない。 ClojureScriptとかはもっと突っ込んだ実装になってるらしいけど使ったことないや。
kanrenの方がschelogより使えるなら乗り換えるかな とりあえずreasoned schemer本は注文した
ブラウザでLispが動くなら、テキストボックスでemacsみたいなテキスト編集ができたり、AIブラウザができたりするってこと?
IEをw3mモードでキーボード操作できるようになるのか
kanrenはcall/ccない処理系でも動くのがschelogとの違いなのね
schekyo, schetake, schetomo
kanrenよりもminiKANRENの方が開発活発みたいだ
型推論を含まない動的言語間の変換なんて lex/yaccでほとんどできるじゃん
continuationやgeneratorもですか?
CPS変換はyacc で書けないことはないんじゃない?
yaccでCPS変換できない場合ってどんな場合?
>>868 ・マクロ使ってる場合
・関数としてのS式を動的生成した場合
マクロは5%以下かい
マクロは普通は展開してから変換するんじゃないの?
処理系いるがな。lex,yacc以外に。
マクロなしの処理系作って その処理系でマクロ展開する処理をlispで書く そういう実装以外を見たことない
yaccでCPS変換のみならずevalの処理系そのものまでも作ってしまうことに…
875 :
デフォルトの名無しさん :2012/08/19(日) 01:30:50.14
毎度お世話になります。質問させてください。 環境はGauche 0.9.3.3です。 あるスクリプトで生成したS式(文字列主体のデータセットです)を一旦ファイルに書き出し、別のプログラムで読み取りたいのですが、 単純に(print)すると文字列の二重引用符が外れてしまい、(read)することができないようです。 なんとか直接扱える形式にしたいのですが、良い解決策を御教授ください。
write じゃいかんの?
>>876 あ、知りませんでした。これにて解決しました。
腑甲斐無い気持になりました
ありがとうございまいした。助かりました。
今はLISPの宣伝するときに、データのパーサを作る必要がないとは言わないのか…
readした内容(A)を一旦writeして、さらにそれをreadした時(B)、 (equal? A B) =>#t が保障される
「素数夜曲」、Amazonでユーザーレビューが付かないのはなぜなの? 誰か書いてよ。
∧ ∧ ((●)(●)) < Gaucheで検索して君もSchemerになってよ! V
miniKANRENの文献見てくと schelogのリファレンスみないのだけど 何故なんだろう
リソース開いたまま関数の途中で継続渡しして、継続渡したまま関数の途中でgoshそのものを強制終了したときにリソースがどうなるか不安で夜も眠れない
眠らなければそのぶん時間をいっぱい使えるじゃないか
発想の転換とは恐ろしい
CPS変換で継続が引数の最後にくるの気持ち悪い 引数可変の関数もあるんだし先頭にもってきてくれよ (foo args ... ) (foo-cps k args ...) (foo-cps-wrong args ... k)
継続つってるけど、CPSで実際に渡してるのはクロージャだから 暗黙の継続のスタックポインタを用意すれば わざわざ引数伝播させる必要はないわけだ
CPSまで活用してるのにマクロを利用しない理由を知りたい
アホは無理に加わらんでもいい。
前にCPSに変換してCコードに変換する処理系があったような 理屈ではフル継続に対応できそうな感じだったけどよく覚えてない
>>895 rhizome/pi とか chicken とか。
chicken は処理の各ステップで一旦止めて出力する機能があるので CPS 変換した状態のコードも見れるよ。
子飼弾がソフデのエッセイでLISPについて書いてた
898 :
. :2012/08/25(土) 19:24:18.59
miniKanrenで (caro _car _cdr result) じゃなくて (caro result _car _cdr) にしてほしかった 継続の話に関係するけど
Caroじゃなくてconsoだった
>>901 S式をTeXに変換するプログラム自作して、コピペしてる
HTML版も自作した
たぶん、その方が早いのではないかと
slatexはGaucheの豊富なライブラリをそのまま使えるぽい感じなので なんとかして動かしたい
slatex.scmは単に処理関数を定義するだけで実行はしないので、例えばこんなスクリプトを run-slatex.scmといった名前で作っておいて (add-load-path "." :relative) (load "slatex.scm") (define (main args) (if (null? (cdr args)) (exit 1 "Usage: gosh run-slatex.scm file.tex") (process-main-tex-file (cadr args))) 0) gosh /path/to/run-slatex.scm source.tex とかすればいい。
905 :
904 :2012/08/30(木) 18:21:36.29
(add-load-path "." :relative) は slatex.scmと同じディレクトリにrun-slatex.scm を置くって前提ね。
slatex動きました 思ってたものとかなり違ってました 単にSchmeのコードをlatex中に書きやすくするものだったようでした
むしろ文庫本サイズで売ってほしい 1500円までなら買う
素数夜曲、電子書籍にしてくれんかな?
なぜここで頼む
電子書籍はいいから、ソフトカバーにしてほしい
紙ならA4版にしてほしい 分厚くて読むの大変なので とりあえず自炊して読んでるけど、最初から電子書籍なら楽ちんなのに(PDF販売って日本だとオライリーしかやってないんだよな)
900ページを電子書籍で読むと目が死ぬと思う
それ以前に2分冊に出来なかったのかねぇ。著者は個性の強そうな人っぽいけど。
>>909 これって英作文例文集としては使えるぐらいにちゃんとした文章になってるの?
>>917 それが問題になるんなら読んでみれば?
意味が分らなくてゴネてるんじゃないよな?
英作文の例文に使いたいっていうのも意味不明だけど 読めなくて聞いてるならアホだし 読まずに聞いてるならもっとアホだよな
多分、アイちゃんだよ。
英語が読めて当然みたいな風潮ってどうにかならないのだろうか…
まあ日本は特別だよね、何かと閉鎖性が
英語が読めない時点で雑魚決定だから
戦争に負けた時点で雑魚というか奴隷だからな
そんな発想だから日本は駄目なんだよ。ちっさ
アメリカの財布だろ
みんな本当に英語読めてるの? 知ってる単語が8割くらいあって、プログラムのコードがあるからなんとなく読めてる気になってるだけじゃないの?
逆に日本語の文章読んだ時に全部の単語の意味が辞書に書いてあるみたいに分かっているだろうか?
まあでも読めるべきだと思うがな。 ヨーロッパ行ったときフランス語の国だったけど、喫茶店のおばちゃんでも普通に英語通じたわ、単語だけじゃなくてちゃんと会話でね。 台湾・中国も同じ。 海外行くと、日本の特異性・閉鎖性を感じざるを得ないね。
>>929 バイト先に中国人のバイトが4人くらいいるけど、中国人同士で言葉が通じないから日本語で話してる
いくら言語のスレだからって
英語の文法は語順つまり構造にかなり重点がある。 だから単語の羅列だけだとアホに聞こえる。 日本語は単語+助詞で文法上の位置づけも表している。 ほとんどが名詞の羅列だけの歌もあるくらいだ 「よこはま たそがれ」
英語読めないとか言ってる人ほんと勿体無い 3ヶ月でもまじめに取り組めばだいぶ違うだろ目覚めろ
>>933 少なくとも3年間はまじめに取り組んでるはずなんだけどな…
ふと思ったけどS式を使って統語分析をするようなソフトってある? X bar theoryとS式間のtranslatorなら誰か作っているかと思うんだが 見当たらなかった 日本語と英語は鏡像構造が見られるのだから s式の操作の感じで言語も操作できる時代がきてもいいのに
>>935 実用Common lisp にそれっぽい例題がいくつかあるから改良すればいいと思う
>>932 語順、構造に重点がある言語しってるよ。
Lisp って言うんだ!
On LispのATN
schemeの本を読むと必ずと言っていいほどscheme処理系を自作する話が載ってるんですけど、 eval と apply の違いがよく分からないです
>>939 evalはなんでも評価
appyは関数適用のみ行う下請け関数
単純な処理系ではapplyがevalのほとんどを占めるけど、
組み込み関数のapplyやCLみたいにマクロがあれば、
applyはevalの一部にすぎないとはっきりすると思われ
「なんでも継続」を読みましたがさっぱりんこでした。 そんなぼくちんでも理解できるくらいに、Schemeの継続をわかりやすく説明した資料を紹介してください。 なおSchemeの基本文法は知っています。継続がどうしても理解できない。
Cのlongjmpと違う点は setjmpが保存するのがレジスタのみに対して 継続は取り出した時点の状態を全て保存する ただし保存といってもコピーを作るわけではなく 継続の中身を更新すると、それを参照する継続も影響を受ける 親子の関係にある継続は広域脱出や例外処理として機能し、 兄弟関係にある継続はスレッドのように機能する
>>942 私は継続は納得できたけど、継続で飛んで行った後にスタックと今まで開いてたリソースがどうなるかが気になる
到達可能な場合にはコピー・保存されるし、そうでないのなら破棄される。
コピーじゃなくオリジナルそのものだよ クロージャーの原理と同じく参照が切れない限り残るだけ
閉じてないリソースを残したまま違う継続に飛んだら 参照が切れるか処理系を終了させるか明示的に閉じない限り そのまま残り続ける
リソースの参照を切ってもすぐに回収はされない GCが呼ばれるまでは残り続ける GCが参照の切れたリソースを検出した時、 リソースに関連付けられたハンドラが呼び出されて クローズ処理が行われる スタックは継続を構成する1要素だから、 継続の参照が切れればGCの呼び出しで回収される
後のScheme48である
そしてすぐ解散して黒歴史と呼ばれ
shameの多い生涯を送って来ました。
scm48
初日の日曜日だけなら休暇とらんでもいけるか。
Lispマシンみたいな老人が昔を懐かしむようなチュートリアルに何万も払うのか
満足感を買うようなもの
プログラマの裾野も広がったんで、 こんなの気にしても仕方ない。 言語処理系くらい書ける人間対象じゃないと。
言語処理系くらい書ける人間が どこかで必要とされてるんでしょうか?
ええ、あなたの知らない世界で。
Schemeの出来損ないしか作れない奴は対象外で
言うまでもなく対象外だよ?
>>961 人の必要を満たしちゃダメでしょ
こっそり自分用の言語処理系書くことで、同僚の10倍の生産量と10倍の遊び時間を保持してるんだから
>>967 大学関係は嫌でも先輩の遺産のLISPを使わされるから
luaより上というのが驚き
HaskellとLispでは どっちがよく使われてるだろ
EmacsLispがある以上Haskellに勝ち目はない
>>971 大学で、LISP系のプログラムがなぜかPythonに置き換わりつつある
本屋に統計やWebアプリのPython本が並んでるからバカ学生が使ってる
LISPも記号処理以外にも数値計算とかの応用本を出すべき
>>973 コンピューターグラフィックにかなり活用されてた時期もあるので、
数値計算のノウハウだってあるはずだよな。
ノウハウがあっても、処理系のインストールの方法からガウスの消去法までコードが載ってる本が書店にないとダメだと思う
976 :
デフォルトの名無しさん :2012/09/15(土) 18:47:05.11
-─フ -─┐ -─フ -─┐ ヽ / _ ───┐. | __∠_ / __∠_ / / ̄| / / | / /⌒ヽ / /⌒ヽ /l / | ( | ( | / / l /\ | / \__ _ノ \__ _ノ / \ / \ |_/ __|__ __ l __|__ l ヽ ヽ | |  ̄ ̄ / -┼─ | | l | | / | ─- ├─┐  ̄| ̄ヽ | | | | | / | | │ ─┴ー┴─ ヽ_ | ヽ__ / ヽ/ | ヽl l l | ┌─┬─┐ ─-- | ヽ | ヽ | _. ├─┼─┤ __ | l | l / ̄ └─┴─┘  ̄ ヽ | | | | ( , l ヽ | し し ヽ__ / ヽ___,ヽ _ノ
何故かいまごろになって「素数夜曲」→「SICP」という王道コースに相応しい 書籍がそろっちゃったんだよな。入門者はまずはそれをやれば間違いない。 次スレ立てるなら、テンプレに参考文献として入れてとくべきじゃね?
良いんじゃね。
>>973 >大学で、LISP系のプログラムがなぜかPythonに置き換わりつつある
結局LISPだとアルゴリズムとか本質的なところを学ぶ前に慣れること多すぎで
LISP知識がかえってノイズになっちゃうんだよ。
再帰やリスト操作、高階関数とかもRubyやPythonで自由に使えるしね今は。
小学校で LISP を必修に。 教科書は Little Schemer で。
洗脳
さあ埋めチキンレースがはじめりです
>>979 初学だったらLispの方が覚えること少ないだろうに。
ここまで言語の文法が簡単な言語ってLispとForth位しかないと思うが?
Lisp の方が好きだけど、Forth 使いが Jedi と呼ばれるのだけは羨ましい
10進数より2進数の方が覚える文字は少ないが 人間には10進数の方が扱いやすい。 同様にPythonよりLispのほうが文法が簡単でも 人間にはPythonの方が扱いやすい。
うめ
>>983 その理屈でSchemeを推奨してたことがあったけど、結局、大学では記号処理以外では普及しなかった
数式処理はLisp強いのに 数値計算とつながらないの不思議
括弧が遺憾の意
知らないだけでしょw 周りにmaxima使ってる人いっぱいいるよ。 モデリングした後の、数式処理→数値計算に。
LISP本は、数式処理の解説はあっても、数値計算の解説がないのはデフォ
>>983 >初学だったらLispの方が覚えること少ないだろうに。
>ここまで言語の文法が簡単な言語ってLispとForth位しかないと思うが?
碁の方が覚えることは少ないが、将棋の方がすぐ面白さがわかる
LISPは碁、Rubyなんかは将棋
schemeはオセロ
>>990 Lispで数式処理はわかるけど数値演算系ってNativeに落とし込める場合CommonLispでコンパイル時型指定バリバリとかじゃないと速度だしにくくない?
今時のマシンだったらきにしないのかもしらんけど。
ちょっとは調べろよ。 他の言語のソース吐ける。
>>977 その本、前半の数学部分飛ばして読める?
>>985 僕ら人間が一歩だけコンピュータに歩み寄れば、世界はよりよくなる、そうは思えないかい?それがS式だ。
素数夜曲、前半はおまけ、後半が本題。
もう素数夜曲はいいって
>>997 ますは10進数の代わりに2進数使うとこから始めようか
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。