Lisp Scheme Part40 [転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
言語の習得のための言語ではなく、プログラミングを習得するための言語だよね >>683
MITでもScheme教えられる教師が居ないと言うのに 汎用言語じゃね? 特別に何かに特化しているわけじゃないと思うが。
レイモンドは「悟り体験のため」って言ってるけど、
グレアムはそんなこと言わずに使えばいいじゃないのという立場で莫大な収入を得ているので、
使いたいように使えよ〜 >>687
ああそうか
LispからPythonに変えたんだろ
もう大学でも無理って時代になってきたかもな 教える人がいないからってわけじゃないよ。
Sussman 自身もまだ現役だし。
Sussman が語った内容の日本語訳がここにある。
https://cpplover.blogspot.jp/2016/05/mitsicp.html >>690
「教わる人がいないから」
「教える意味がなくなったから」
って方が実態に近いかもな 主にC++な自分にとって、Lispはmodern C++が目指す最先端なんだけど、
Lispの人たちゃもうどっかに行っちゃってるのかね。 >>691
要約すると「総合的に考えて Scheme は入門講義ではベストではなくなった」って話で、
MIT での教育・研究全てから LISP が排除されたって話ではない (大幅に縮小はしてるかもしれない) ので、
Scheme が手頃な場面では Scheme だって使うだろうし、
時代の変化とそれに合わせた適材適所っていう当たり前の話なんだよね。 >>690
70の爺さまだぞ
モチベーションなかろ >>695
言語を変更するにあたってサスマン自身も主導者のひとりであるように書かれてる。
モチベーションがないならむしろそのまま続けるんじゃね?
だいたい LISP と言ってもフルセットの Common Lisp を隅々まで使おうってんじゃないんだ。
SICP で使ってるのは R4RS 時代の Scheme だぞ。
MIT の教員レベルならどうということのないものだろ。 >>696
>>690 の中で1997年の時点で教えるの嫌になったって書いてる。サスマン50歳でモチベ低下w >>697
「今のエンジニアリングに求められるエンジニアを育てる」ということにモチベーションがあったから、
「それに合ってないカリキュラム (SICP) で指導する」というモチベーションが低下したんだよ。 >>698
そうなのかw
今でもエンジン設計できるヤツとかエンジンの部品を開発できるやつは必要だな。
出来合いの部品買おうにも部品屋がいないと駄目だ。 >>699
MIT で SICP を使ってた講義ってのはあくまでも入門講義であって、それだけで課程が終わるわけじゃないかんね。
そこんところ誤解なきよう。 >>700
その入門レベルで挫折したわけだが
決して翻訳のせいなどではない >>701
入門って言っても MIT のレベルの入門だから仕方がない アメリカの大学は1〜2年生の時に適正ない奴をふるい落とすんだよ
ジョエルがJavaスクールのなんたらで書いているように MITは、入学は簡単、卒業は難しいと言うアメリカの大学の常識は当てはまらないな。
どっちも超難しい。 Common Lisp でscheme と同じ感じで...の使えるMatch マクロ使う方法ないですか? >>706
部分的に syntax-rules を再現したようなライブラリはこういうのがあるよ。
http://www.ccs.neu.edu/home/dorai/mbe/mbe-lsp.html
省略子は ... ではなく *** になってるのと、ハイジニック性は再現されてないことに注意。
マクロ展開器としてだけでなく、パターンマッチ関数を直接使うことも出来る。 >>704
それは両方の敷居が高い方にスライドしてるだけとも言えるのでは
つまり反論になってない cpsスタイルはクロージャの応用にすぎない。慣れれば難しくないし、jsのコールバック地獄の意味も分かってくる。
難しいのは各種継続オペレーターのセマンティクスと使いこなし。 SCM_VM_MAX_VALUES を適当な値に書き換えてからgaucheコンパイルすれば? そんなことはないはずだが、少ない多値を扱うときに特別な最適化をしていたような気がする (apply values (iota 25))でtoo many valuesとか出る
オセロとかチェスの座標(SQ_A1, SQ_B1, ... , SQ_G8, SQ_H8)に連続した数字を割り当てるにはどうすればいいでしょう? へー、そんな制限があったのか。
まあそんな多値を使うのはアレであることには違いないのでしょうがないといえばしょうがない。
識別子に連続した数値を割り当てるにはマクロが必要だが Scheme 的には R6RS を仮定するか処理系の拡張を使う必要がある。
Gauche を使う前提でいいの? racketとchickenではエラーが出ないのでgaucheやめるかも✋
でも
(define-values (SQ_A1 SQ_B1 ... SQ_G8 SQ_H8) (apply values (iota 64)))
と同じぐらい簡単な他の表現をぜひ知りたいです Gauche だとこういう風にすれば識別子の方の自動生成も含めて出来るけど、
なんかイマイチすっきりしないなー。
もっといい方法ありそうだと思うんだけど。
(use util.combinations)
(use gauche.sequence)
(define-macro (define-serial-numbers)
`(begin
,@(map-with-index
(^(i x) `(define ,(string->symbol (apply format #f "SQ_~a~a" x)) ,i))
(cartesian-product `((A B C D E F G H) ,(iota 8 1))))))
(define-serial-numbers) scheme勉強するならこのコード読んどけみたいなのあります?
せいぜい1000~2000行程度の綺麗に書かれてるコードを探してるんですが 3x3の0Xゲームの評価関数をこの言語なら簡単に書けると思いましたが無理でした。 言語のせいです。ぶっちゃけAI記述に向いてません。 今風AI記述向けDSLってできるよねきっと
内部でマクロ書く言語ならアドバンテージあるんじゃないか? >>725
マクロの有無(内部でマクロ書けるってのはC的なんじゃなくてLisp的なマクロって意味なのか?)がAIプログラミングと何の関係があるの? AI書いたことない人がLISPはAIに向いていると言ってるだけ。 お前の言うAIはAIというよりディープラーニング限定だろ >>727
LISPを知らない奴ほどLISPについて語りたがる、とどこかの先生が言っていたけど、
まさに君のことだな >>730
キミがどーんとLISPにおけるAI記述を語ってもいいんだよ。
まぁ書いたことないから低レベルな煽りしかできないんだろうけど。 80年台に腐るほど論文が書かれてるから勝手に探して読んでよ
集大成的なのは人工知能学会から出ている「人工知能ハンドブック」とか、まあ探せばいくらでもある
AI=ディープラーニング前提で話をしてんのかね >>732
1980年代の人工知能の研究成果で現在でも役に立ってるのあるのか? 80年代といえばエキスパートシステム。壮大な詐欺だったな。
>>732 で? キミはその詐欺に加担した一人? >>725
LISPのマクロってたいしたことないよ。それがLISPの本質でもないし。
ただインタプリタでC風にマクロが書けるというだけで。
マクロはマクロなんで、LISP内部で置き換えするだけで本質的なコード処理はしてないし。
それ(マクロ)が記号処理の本質ではないし。
何ならCのマクロ使って記号処理しましたって公開してみ。笑われるだけだから。
LISPの世界はこの程度の話すら理解できてないから誤解されているといっている訳。
だいたい最近までOpenSourceでScheme処理系開発してた連中が居たけれども、
彼らがAIと言った事はただの一つもないよ(w おいらも735に賛成。
エキスパートシステムは失敗と無駄そのもの。第五世代も。
現実には民間企業ではMSエクセルが経営支援機能を果たしている。
表計算がAIより機能を果たしている皮肉。 いやマクロ使わなかったら
Lisp使う意味ほとんどないだろ インタプリタだとかCのプリプロセッサマクロだとか、イカレ過ぎててツッコミどころすらわからんw ディープラーニングを機械学習と言えば詐欺臭はでない。人工知能なんて言うから投資詐欺に使う奴が出てくる。
既存のTCP/IP使ったクライアントサーバシステムをクラウドなんて言い出すのと同じ。 みんなschemeで何作ってるの?
これからscheme始める人は何作るべき? あとC++に組み込んで3Dモデルの作成しようと思ったがまだ上手く行ってない
しかし、おかげで継続が理解できてJSやC#のコルーチンが中でどう動いてるの、とか
本当に勉強になった
人に説明できるようになって仕事に役立ったよ CPUのコールスタックがわかってれば、スタックでなくヒープを使い捨てることにしたと思えば理解は容易いんじゃないか。
プログラミング言語の抽象度しか知らないならCPS変換から入るのが早道かも。 私も CPS で考えるのが早道だと思う。
CPS で考えた時に表出する環境の受渡しを普段の Scheme では暗黙にやってる感じ。 俺はコールスタックからだったが
>CPS
こういう捉えかたもあるんだね
知らなかった、ありがとう! 関数の戻り値が渡る先を操作できるだけじゃん。
トップレベルの特異性には注意だけど。 c++で継続はライブラリ使うだけで良いみたいだけど
C言語では継続はマシン語いじらないと実現出来ないの? >>760
C++ではライブラリで継続が使えるってどういうこと? >>760,762
このあたりの話かな。
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0534r3.pdf
今のところはまだ提案があるだけで標準に入ったわけではない。
継続を表現するライブラリっつっても、
そのライブラリの中身は何がしかアーキテクチャ依存になるだろうけどな。 C++には、GCとか実装から切り離して、実行環境をカプセル化した
関数オブジェクトがあるから、そのことかも ええと、一応念のため説明させていただきますが、C++では関数は
オブジェクトではないのです…… Exaリーディングのすゝめ
https://www.slideshare.net/ShinichiMakino1/exa-84358376
👆これええな
schemeでも読んだら勉強になる、程よい大きさのコードないものか schemeについてのことではなくてelispについてなんですが、同じかもしれないと
おもってお尋ねします。コードを書いた実行をして、(コードを読み込んで)
そのあとその実行して読み込ませたものをclearして、(書いているコードはそのまま
なんですが、読み込んだという事実をclearしたい)それで別のコードを下に書いて
その下に書いたものだけを実行するという風にしたいのですが、そういうclearする
ことは可能でしょうか?どのようにするのでしょうか? 768の質問を取り消します。後日に尋ねるかもしれませんがその時には
よろしくお願いします >>769
schemeってみんなインタプリタとかコンパイラの実装ばっかですね
schemeの勉強でもmapやappendを実装しましょうみたいなのばっかやし
まあguiもwebもゲームも低レイヤーも出来ないとなれば仕方ないんかな 皆さんclassとかrecordとか使うんですか? >>771
あまり話題に上がらないけど GTK バインディングとかウェブフレームワークとかは有る。
FFI を使えばどんなライブラリでも使えるのでとりたてて分野が限定されているということは無い。
メモリ管理とか、Scheme として自然に使えるようにする面倒くささはあるので、
それを整備したものってのは最終的には物量の問題だと思う。
Chicken には Eggs が、 Racket には Planet というモジュール管理システムがあって公式リポジトリに登録されているライブラリの量もまあまあ多いので、
そのあたりから興味があるものを探してみたらいいんじゃない? >>772
Scheme の record は R6RS と R7RS で違うし SRFI でも微妙に違うのがいくつもあるので、
処理系によってサポート状況が違って使いにくいってのは感じるかな。
それでも多少ラップすればそれなりの移植性は確保できるので、
個人的には積極的に使ってる。
class というかオブジェクトシステムについては Scheme ではまとまった提案がないから
CLOS をベースにデザインされたものが多いとはいうものの処理系による差が激しくて、
最初から特定の処理系をターゲットにすると決めている場合じゃないと使わないな。
でも使うと決めたら積極的に使ってる。 webやるならclojureで良さそう(´・_・`) 人生3度目の the little schemer です。
xyzzy で確かめながら読んでいますが、一つ疑問が生じました。
教科書では
(lat? (atom turkey or))
と印刷されていますが、手元の処理系(gauche 0.9.5) では
(lat? '(atom turkey or))
と関数 lat? の引数に ' をつけないとうまくいかないのです。
これはどういう理由なのでしょうか?この ' は scheme の用語ではなんと呼ばれているのでしょうか?
ずっと教科書を読んでいくうちに自然とわかってくる事項でしょうか?
よろしくお願いいたします。 >>776
' は quote の略表記。 たとえば '(a b c) は (quote (a b c)) と書いても同じ。
私はその本を持ってないからそのコードで何を教えようとしてるのかよくわかんないけど、
quote はかなり基本的な要素なので理解できるようにしてるとは思う >>777
ご回答ありがとうございます!
教科書 'the little schemer' -> https://www.amazon.co.jp/dp/4274068269 有名そうで読んでいる人が多そうなものを選びました! little schemerはsicpの前に読む人が多いのかな
自分は読まずにsicpに突っ込む予定だけど SICP は計算機科学の専門書だし、趣味プログラマには高度すぎるんじゃね?
SICP は現実的な部分についても書いてないから Scheme を (日常的なスプリクティング用途程度に) 普段使いしたいって
程度の気持ちで読み始めると、理論の部分で挫折して放り投げがちなんじゃないかな?
いや、ガチで背景にある理論を理解したいって志があるなら SICP から読むことに反対なわけではないけど、
もっと緩く Scheme を使いたいっていう気持ちで使う人も歓迎したいし、
最終的に SICP を読んで理解するのが前提みたいに言うのはちょっとどうかと思うよ。 >>776
その「atom」ってのが実は手続きなのよ。本文ではなく前文かどこかに定義が載っていたと思う。 >>781
忘れてくれ。手元の本見たら、手続きなのはatom?だった。 最近はnumpyにしか実装がない数値計算法が増えた
Racketはnumpyのインターフェースあるけど、他はどう? Racket にはそんな変態なものがあるんか。
どうやって実現しているのか興味あるけど、ググっても見つけられなかった。 ■ このスレッドは過去ログ倉庫に格納されています