[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 01/29 10:31 / Filesize : 247 KB / Number-of Response : 980
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

Lisp Scheme Part22



1 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 23:58:40 ]
□過去スレ□
Part21: ttp://pc11.2ch.net/test/read.html/tech/1207300697/
Part20: ttp://pc11.2ch.net/test/read.cgi/tech/1205021786/
Part19: ttp://pc11.2ch.net/test/read.cgi/tech/1200237296/
Part18: ttp://pc11.2ch.net/test/read.cgi/tech/1186922295/
Part17: ttp://pc11.2ch.net/test/read.cgi/tech/1177065699/
Part16: ttp://pc11.2ch.net/test/read.cgi/tech/1172404795/
Part15: ttp://pc10.2ch.net/test/read.cgi/tech/1151025773/
Part14: ttp://pc8.2ch.net/test/read.cgi/tech/1132275726/
Part13: ttp://pc8.2ch.net/test/read.cgi/tech/1115901841/
Part12: ttp://pc8.2ch.net/test/read.cgi/tech/1100229366/
Part11: ttp://pc5.2ch.net/test/read.cgi/tech/1091456033/
Part10: ttp://pc5.2ch.net/test/read.cgi/tech/1075630259/
Part9: ttp://pc2.2ch.net/test/read.cgi/tech/1069594582/
Part8: ttp://pc5.2ch.net/tech/kako/1058/10582/1058263391.html
Part7: ttp://pc5.2ch.net/tech/kako/1042/10421/1042167213.html
Part6: ttp://pc3.2ch.net/tech/kako/1031/10315/1031560687.html
Part5: ttp://pc3.2ch.net/tech/kako/1023/10230/1023091882.html
Part4: ttp://pc.2ch.net/tech/kako/1016/10162/1016211619.html
Part3: ttp://pc.2ch.net/tech/kako/1008/10082/1008220265.html
Part2: ttp://pc.2ch.net/tech/kako/1002/10025/1002584344.html
Part1: ttp://piza2.2ch.net/tech/kako/987/987169286.html

488 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 18:41:12 ]
>>485
必死すぎw

489 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 18:57:30 ]
>>488
必死だから何だ?
マジで気持ち悪いからな。お前も含めて。
書き逃げばっかりしてないで意見があるなら書けよ。

490 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 19:32:58 ]
www.inf.hs-zigr.de/~wagenkn/PP-Buch/

#!C:/Programme/PLT/mzscheme -r

(require (lib "cgi.ss" "net"))

(display "content-type: text/html") (newline)
(newline)

(display "<HTML>")(newline)

(display "<HEAD><TITLE>cgi-script's response</TITLE></HEAD>")(newline)

(display "<BODY>")(newline)

(display "Hello, I'm Mr. ")
(display (extract-binding/single 'surname (get-bindings)))
(display ". <BR>")(newline)
(display "Just call me ")(display (extract-binding/single "firstname" (get-bindings)))
(display ". <BR>")(newline)

(display "</BODY>")(newline)

(display "</HTML>")(newline)

491 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 20:55:25 ]
(define λlambda)

492 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 22:51:48 ]
lambdaは構文だからdefine-syntaxやdefine-macroにしたほうがポータブル

493 名前:デフォルトの名無しさん [2008/06/12(木) 01:55:43 ]
scheme初心者なんだけどほんとに再帰って難しい
入門書読んでて再帰の便利さはなんとなく伝わったけど・・・

やっぱ上級者になると普通に使えるんですよね
俺ってやっぱりダメな子・・・

         |        |/(-_-)\|
          |        |  ∩ ∩   |
          |           ̄ ̄ ̄ ̄ ̄
        :::, ―――、
       ::::/./^^^^^^'vl
     :::::::| | /  \ ||
      :::::::(sl rェ , rェ |') ウツダ
      :::::゙ゝ、 -  ノ
     :::::/ l  ̄ ̄lヽ
     :::::|-|/l⌒l⌒l-|
     :::::\二、_)二ノ _____________
      :::::|||  |:|  |
      /`ー(⌒)(⌒)
     /;;;;;;;;;;;;;;;; ̄;;;;; ̄
   /
 /



494 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 02:10:18 ]
>493
昔むかし、Pascalの授業の宿題で再帰を使わないと事実上解けない問題を
「再帰呼び出しと言うものを全く知らずに」何とか解こうと悪戦苦闘した
俺よりはマシw。

495 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 02:14:54 ]
ちなみにその教科書にはその問題が記述されている箇所以前に
再帰呼び出しを説明している部分がほとんど無かった。

今なら考えられない教科書だと思う。

496 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 02:19:25 ]
極めて教育的な良い教科書だな



497 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 02:22:45 ]
一行一行その時の値がいくつになるか紙に書いてみたらわかると思う

498 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 02:23:14 ]
「再帰」という単語をほとんど使わずに
それを記憶に焼き付けさせたのか

499 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 02:32:13 ]
さらにちなみに俺の場合(Pascalでの再帰の場合)は
見かけ上、同じ名前の変数や関数でもシンタックス(戻り番地など)と
共にスタック上に別もの扱いで次々と積まれて行く事が分かって
ようやく納得が行ったよ。

そこに気づくまでは訳が分からなかった。

500 名前:デフォルトの名無しさん [2008/06/12(木) 02:33:08 ]
ゲームコンテストに出しなさい。
www.tohofuhai.com/  豆腐ゲームコンテスト
kirara111.sakura.ne.jp/  星屑きらら杯
3punge.com/ 3分ゲーコンテスト(今休止中)



501 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 02:55:49 ]
>>494
昔pascalとくれば東大の学生だったんだな。

502 名前:デフォルトの名無しさん [2008/06/12(木) 03:30:00 ]
Eclipse3.3+Cups使っている人いる?
なんか環境自体が、うまく動いていないような気がするのだが・・・

503 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 03:48:30 ]
再起で解け、ループで解けない問題はない。

504 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 04:16:06 ]
それは「問題」という言葉の意味を取り違えてるのでは。
>>494の思い出話に出てくる「問題」は、あくまで宿題なわけで。
たとえば身も蓋も無い例をいえば、「ただし、ループを使ってはいけない」と書かれた「問題」は、
再帰で解けてもループでは解けないよ。

505 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 08:09:22 ]
>>494 >>499
Pascalの機能として知らなかったのなら話はわかるが、
再帰の概念がわからなかったっていうのは・・・
高校の数学をさぼってたと考えられる。

506 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 09:30:12 ]
再帰じゃないと解けない問題なんてあるのか?
「再帰を使用せよ」と指定されてないかぎり、なんでもif/gotoで書き直せる
はずなんだが。



507 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 09:49:54 ]
例:「再帰を使用せよ」って指定された問題

508 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 09:59:14 ]
Schemeの末尾再帰はむしろgotoに近い機能ですよ
Schemerはgotoを嫌っているわけではないと思います

509 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 10:26:12 ]
ackermann関数を再帰なしで

510 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 10:31:17 ]
現在の有限の記憶域の計算機で計算できるものは再帰なしで計算できる。
配列をスタックと看做してループすれば再帰と等価。
たぶん。
無限の記憶域の場合は等価かどうかはわからない。

511 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 10:44:03 ]
gogo ackermann!!

512 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 11:21:09 ]
>>510
>配列をスタックと看做してループすれば再帰と等価
それじゃ関数の呼び出し部分を自分で作ってるのと同じじゃないか?

513 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 11:35:21 ]
>>510 たらい回し関数ってループに展開可能かい?


514 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 12:01:04 ]
>>512
そう。
端的に言えば再帰を使わずに仮想機械を組む。
その中で仮想言語で再帰的プログラムを組む。
表層言語には再帰は現れず、
データ(仮想言語)に再帰が現れるだけ。
CPUは再帰的ではなく反復的に計算するけど
再帰計算ができるでしょ?
それをソフトウェアでするだけのこと。
再帰的なデータも許さないとなれば
再帰的アルゴリズムが表現できず
チューリング完全でなくなる。

515 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 12:01:43 ]
Ackもtaraiも可能です。
>>510
無限記憶領域でも等価です。

詳しくは計算理論の入門書で。

516 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 13:17:31 ]
>>493
上級者になると、ていうより基礎中の基礎。
ドラゴンボールで言えば舞空術。
囲碁で言えばシチョウ。
でもあのポール・グレアムでさえ
プログラムを習いたての頃は反復アルゴリズムしか知らず
再帰を使いたいなどと考えたことはなかったし
(Ansi Common Lisp)
19歳の時には
「たぶんLispを学ぶべきなんだろう。しかしLispはあまりに異質に見える。」
(Lispがそんなにすごいなら ---If Lisp Is So Great---)
などと考えてたんだから
頑張れ!



517 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 13:17:52 ]
>>503
あたりまえじゃないか。もちろん逆も真。

518 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 13:30:10 ]
有名な再帰画像

Drosteココア
en.wikipedia.org/wiki/Image:Droste.jpg
メリーミルク
mognavi.jp/image/food/00/01/51/4902705021471.jpg

519 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 13:34:59 ]
>>493の書き込みを見て、ふと思った。
再帰を見て、わざわざこんなことしなくても・・・と思ってしまう問題が多い。
たまに再帰があって良かったなと思う程度。
僕は、きっとLispに向いてない。


ちなみに、ほとんどLispはできません。

520 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 13:51:53 ]
>>519だが、連投すまん。
この質問に的確に答えてくれる人がいたら、
みんなの(僕の)ためになるんじゃないかと思って。

たとえば、再帰を使うめっちゃ初歩的な関数lengthがあるよね

(defun length (lst)
(if (null lst)
0
(+ 1 (length (cdr lst)))))

再帰がわからない人って、読むときにlengthって関数の
意味が知りたいのに(わかってないのに)、lengthを使われても
わかるわけないじゃんってことじゃない?

521 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 13:55:28 ]
その辺について、ANSI Common Lispで言ってたね。
以下、それを引用しているページから引用。

初めのうちは再帰は理解するのが難しいと思う人が多い。
難しいと思ってしまうのは、主に関数に対して誤ったメタファ(比喩)をあてはめていることによる。
人々は関数をマシンの一種ととらえがちである。
原料がパラメータで届き、ほかの関数に下請けに出して処理し、最後に完成品を組み立てて、返り値として出荷する。
関数に対してこのメタファをもっていると、再帰は不可能ということになる。
マシンがどうやって作業を自分自身に下請けに出すのか?
動作中のマシンにはそんな余裕などないじゃないかと思ってしまうことになる。

関数は進行しつつあるプロセスであると見る方が、メタファとしては適当であろう。
再帰はプロセスの中では自然なものである。日常生活でも再帰的なプロセスをよく見る。
たとえば、ヨーロッパ史における人口変化に関心をもっている歴史家を考えてみよう。
資料を調べるプロセスは以下のようなものだろう。

1. 1 つの資料を手に入れる
2. 人口変化に関する情報を探す
3. その資料がほかの役立ちそうな資料に言及していたら、ほかの資料を調べる

このプロセスは理解しやすいものだが、第 3 ステップにより同じプロセスが何度か適用されることがあるので、
再帰的なプロセスになっている。

522 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:00:20 ]
>>520
なるほど、そういう風に悩むのか。

まず、lengthの中のlengthが使われるのはnullでないときだけ、
つまり () に対する length の値は length を使わずに 0 と決まっている。
で、それ以外については length を使うわけだが、だんだん短くなっていつかは 0 が返る。

という具合にステップバイステップで考えていくと判りやすいんじゃないかな。

523 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:02:50 ]
文系の奴は頭だけで理解しようとするからイカン
グダグダ言ってないで手も動かせ

そう言っていた数学の先生がいたとかいないとか
The Little Schemerなんかもそのクチか

524 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:05:57 ]
でもまぁ実際には、理系にとっても「体感」というのは大事だよな。

525 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:20:38 ]
数学的直観って言葉があるくらいだからね。

自分は数列、漸化式が得意で好きだったから、
再帰は何も悩む所がなかった。

実装手法もPコードですぐに理解できた。(東大ではありません>>501)
浮動点による意味づけを知った時には、
漸化式みたいでわくわくした。


526 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 14:43:07 ]
>>521
名文をありがとう。

>>522
う〜ん、自分流に噛み砕くと、
(1)停止することを確認
(2)cdr部分を取って、空リストになるまでは1足し続ける(lengthの場合)
ってことですかね。

>>525
うらやましい。



527 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 15:00:29 ]
部分問題に分けて、(car, cdr)
部分問題毎に適切な処理、(1, length)
部分問題の解を統合。(+)
部分問題の収束地点の設定。(null, 0)

分割統治法の一番極端な形、一要素とそれ以外に分ける。
後は下請け(再帰的関数呼出し)に任せる

528 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 16:27:08 ]
いちいちcarとかcdrみたいな「処理」で取り出させるのが前時代的なんだよなー
LISt Processorなのにパターンマッチが標準で無いってどういうことよ

529 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 16:28:49 ]
>>528
簡単に作れるからでは?

530 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 16:31:19 ]
>>529
簡単に作れるものほど言語が準備すべきだと俺は思う。
そうでないと人によってそれぞれの実装ができてしまって
言語の「中に」バベルの塔ができちゃうからね(実際Lispはそうなっちゃってるのでは?)

531 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 16:35:42 ]
パターンマッチこそが言語内言語なんだよね。
汎用のパターンマッチを使うよりも効率的な専用マッチャーが簡単に書けるから、
必要性が低いのだ。正規表現があまり使われないのも、だいたい同じ理由だ。

532 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 16:40:44 ]
処理系毎の拡張で用意されてるでしょ

533 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 16:43:07 ]
汎用のPrologインタプリタでさえ、Lispなら100行くらいで書けるからなあ。

534 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 16:44:27 ]
>>528
君の考える「パターンマッチ」の具体的な仕様と使用例を示してくれると、
より有意義な議論ができると思う。

535 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 17:51:19 ]
パターンマッチって分岐と分解を同時に行う処理だと思ってる
大抵は分岐の内容に応じてリストを分解するから一度に処理するのは適切な抽象化なはず
下にリストの内容を1だったら2、2だったら5、それ以外だったらそのままにして変換する関数を
書いてみたがどうみてもパターンマッチ版の方がわかりやすい(どうやってパターンマッチを実装するのかは
しらないけど。あとmap使えというのは禁句)
みんなのLispプログラムもみなおしてみたらパターンマッチを使った方がスッキリする部分が多くあるのでは?
このスレにもパターンマッチを「ふわふわしたおまけ」としかみなしてない人が結構多いと思うから
俺のレスがパターンマッチを使うきっかけになってくれれば幸いだ。


(defun (hoge lst)
(cond ((eq (car lst) 1)
(cons 2 (hoge (cdr lst))))
((eq (car lst) 2)
(cons 5 (hoge (cdr lst))))
((and (not (null? lst)) (list? lst))
(cons (car lst) (hoge (cdr lst))))
(else
nil)))

(defun (hoge lst)
(pm lst
((| 1 xr)
(cons 2 (hoge xr)))
((| 2 xr)
(cons 5 (hoge xr)))
((| x xr)
(cons x (hoge xr)))
(else
nil)))

536 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 17:59:53 ]
>>535
後者が簡潔だが、前者が判りやすい。おそらく効率は前者が勝る。
「ふわふわしたおまけ」とは思わないけど、言語の中に別の言語を導入するような
気持ち悪さは感じる。

まあ好きな人は使えば良いのでは?という程度かなあ。



537 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 18:20:59 ]
>>535
CL?Scheme?

538 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 18:27:26 ]
俺パターンマッチ入りの俺Lisp言語だろw

539 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 20:20:34 ]
パターンマッチはなじむと便利
可読性とかは知らんけど

540 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 20:22:11 ]
まあ関数型言語だとおなじみ

541 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 20:25:28 ]
頑張れば CLtL3 に入れてもらえるかもw

542 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 20:28:51 ]
535のプログラムみて思ったんだけど
Listだけどnilじゃないのを一発で判別する関数ってないんかね

543 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 21:05:06 ]
consp
pair?

544 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 21:41:28 ]
来月「Practical Common Lisp」の訳書が出るっぽい
www.bk1.jp/product/02997001

545 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 21:47:48 ]
>>544
原著よりも安いのか。
園城さんって、LispUser.netの人ですね。

546 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 21:54:10 ]
>>543
「List」だけどnilじゃない



547 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 22:37:44 ]
>>528
いろいろな人が考えたけど、
S式とうまくマッチするのがないってのが現状。
これだけ時間がかかって見つからないからないんだと思う。

define-syntaxは一部カバーしていると思うが。

548 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 22:57:14 ]
CLOSがパターンマッチみたいなものだと思うのですが

549 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:32:04 ]
>>547
昔から、
(match '(a b . c) '(1 2 3 4 5)) =>((a 1) (b 2) (c (3 4 5)))
(match-let (a b . c) '(1 2 3 4 5) (list a b c)) =>(1 2 (3 4 5))
みたいなのや、prologのunification辺りはほとんどの人間が
自分の物を持ってると思うけどな。
こういうのをマクロにしてパターンを定数で取れば特殊化もできる。
今は組み込みにするのが流行だろうけど、
LISP系ならパターンマッチはライブラリで自然に実装できる範囲だから、
あえて入れなかったのでは。

550 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:39:31 ]
>>546
nilは「List」だけど。
おまいのListの定義がおかしいだけ。

素人増えましたな。

551 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:46:00 ]
Listだけどnilじゃないのを一発で判別する関数
(define (non-nil-list? x)
 (and (not (null? x))
    (list? x)))
が組み込みであるか?てことでしょ。
これはSchemeのコードだけど。
コンスとリストを混同してるのでは?

552 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:55:31 ]
(and (consp x) (listp x))を一発で判別したい

conspだけでいいのでは

よくない

?←今このへん

553 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:56:48 ]
自分で述語用意すればいいじゃん・・。


554 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:04:15 ]
点対神経症だろw

555 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:07:37 ]
CLの listp (点対でも真)とSchemeの list? (点対だと偽)の差が混乱を招いているのでは?

556 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:25:34 ]
>>535みたいなどこかの俺言語で育っちゃった人は
一度まじめにどっちかで矯正した方がいいよ。




557 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 00:34:25 ]
狼に拾われたがパンダに育てられて観賞用に


558 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 02:00:34 ]
どっかってどこ?
MITとかUCBあたり??

559 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 02:02:26 ]
このスレとかでいいんじゃね?w

560 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 02:07:30 ]
535の脳内のどこか

561 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 02:30:21 ]
>>556
これから独学でLisp習おうと思ってる。
今までプログラミング言語を真っ当に習ったことはなくUNIXのBシェルスクリプトが
ちょっと使えるくらい。

こんな自分が、あとから矯正の必要がないように正しく学ぶためにはどうすればいいですか?


562 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 02:35:00 ]
>>561
訳書は見てないけど >>544 なんて良いんじゃないかな。
実用的な例題で勉強できるから飽きないと思うよ。

563 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 02:37:43 ]
>>561
わたしゃ独学でCLを学んでたけど、
定番の本だけはきっちり抑えておくとそこから、書き方を学ぶことができるよ。
もちろん、本に載ってなくって、知っておいたほうがよい方法やスキルというのも
あるけど、それは実際に勉強会などを通じて人とのコミュニケーションをとっていく
事からだと思うな。

別に俺様言語でもいいけどさ。矯正は必要な場合はあるけど、実際に回りにschemer
がいるかといえば別の問題があるからね。その点は指摘してる>>556というのは
恵まれた環境を持っているといえるね。最近はハブサイトもできつつあるから、
独学者にとってもよい時代がくると思うよ。shiroさんのサイトみたいに人が集まってるとこ
ろは自分から積極的に恵まれた環境を作るきっかけにはなるよ。



564 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 02:40:26 ]
定番ってのは、ANSI Common LispやPractical Common Lisp, PAIPあたりだけど。
オンラインのみで流れているスタイルに対してのよいドキュメントは
先日g000001さんたちがやっていたNorvig and Pitman 1993 (和訳あり)をよんで
みればいい。

565 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 02:48:07 ]
www010.upp.so-net.ne.jp/okshirai/tutorial-on-good-lisp-programming-style-ja.txt

これね。これはcommon lispの師匠に進められた文章でもあります。テンプレに含めて
もいいと思う。

566 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 02:51:18 ]
>>544
ktkr



567 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 07:33:49 ]
>>562-565
thx!

568 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 07:37:36 ]
>>565
その文章はとてもいいよね。
でもおれdeftype使ったプログラムあんまり見たことないんだけど気のせい?

569 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 09:50:06 ]
>>568
> でもおれdeftype使ったプログラムあんまり見たことないんだけど気のせい?

たしかにみたことがない。 あまりないのはしかたがないかも。
typecaseで場合分けすることや型宣言前提だろうし。


570 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 13:55:21 ]
俺は情報隠蔽はpackage, CLOSの仕事と割り切ってる。
だから使ったことない。> deftype


571 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 14:24:51 ]
>>570
微妙にわかるような、わからないような…。
でも、棲み分けだよね。

572 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 17:00:48 ]
>>565
この文章は俺もよく参考にさせてもらいました。ちなみに原文(英語)はこちら。
www.cs.umd.edu/~nau/cmsc421/norvig-lisp-style.pdf

573 名前:546=551 mailto:sage [2008/06/13(金) 23:36:37 ]
>>555
なるほど。私が不勉強でした。
>>550
失礼しました。

574 名前:デフォルトの名無しさん [2008/06/13(金) 23:57:48 ]
で、結局Cuspは使えるのか?!


575 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 01:09:21 ]
こういうこと?

(list? '(1 . 2)) ;=> #f
(list? '()) ;=> #t

(define (listp x)
 (and (not (null? x))
    (pair? x)))

(listp '(1 . 2)) ;=> #t
(listp '()) ;=> #f

576 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 01:14:50 ]
(list? '(1 2)) ;=> #t


(listp '(1 2)) ;=> #t



577 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 05:38:16 ]
まだ理解できてないじゃん
最初からおさらいしたら?

578 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 11:07:37 ]
(list? '(1 . 2)) ;=> #f
(list? '()) ;=> #t
(list? '(1 2)) ;=> #t

(define (listp x)
 (and (not (null? x))
    (pair? x)))

(listp '(1 . 2)) ;=> #t
(listp '()) ;=> #f
(listp '(1 2)) ;=> #t

(define (non-nil-list? x)
 (and (not (null? x))
    (list? x)))

(non-nil-list? '(1 . 2)) ;=> #f
(non-nil-list? '()) ;=> #f
(non-nil-list? '(1 2)) ;=> #t

579 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 11:20:00 ]
(define (nil-list? x)
 (not (non-nil-list? x)))

(nil-list? '(1 . 2)) ;=> #f
(nil-list? '()) ;=> #f
(nil-list? '(1 2)) ;=> #t

580 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 11:21:54 ]
間違えた>>579

(nil-list? '(1 . 2)) ;=> #t
(nil-list? '()) ;=> #t t
(nil-list? '(1 2)) ;=> #f

581 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 12:11:14 ]
DrScheme ver.4.0キタワ

582 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 12:24:12 ]
plt-scheme.org/tour.html

583 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 12:58:53 ]
>>578-580
いちいち無意味なもん貼るな。
自由帳はこちら。>>8



584 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 13:06:37 ]
>>583
初心者に向かって「いちいち」とか書き込んでるオマエの方が「いちいち」ウザイw

585 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 13:07:38 ]
初心者は放って置けば消えていくJK。

586 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 13:21:11 ]
「On Lisp」の「第16章 マクロを定義するマクロ」スゲー



587 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 14:49:14 ]
>>586
その気になれば作れるようになるよ。:-)

588 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 16:10:43 ]
>>265のambをlet-syntaxするマクロを書いたら、`...' が衝突した
codepad.org/FhFcRNhU

こうですか?わかりません!
codepad.org/DOhmrD4x






[ 続きを読む ] / [ 携帯版 ]

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

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