Lisp Scheme Part41

2018/07/15(日) 02:05:28.62ID:oGr67yTf
Common Lisp、SchemeをはじめとするLisp族全般のスレです

■前スレ
Lisp Scheme Part40
http://mevius.5ch.net/test/read.cgi/tech/1426481152/

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

■関連スレ
【Lisp】プログラミング言語 Clojure #4【JVM】 [無断転載禁止]©2ch.net
http://mevius.5ch.net/test/read.cgi/tech/1483498849/
【GNU】スクリプト言語 Guile【scheme】
http://mevius.5ch.net/test/read.cgi/tech/1239985829/
【入門】Common Lisp その11【質問よろず】
http://peace.2ch.net/test/read.cgi/tech/1411307361/
【Scheme】Schemeインタプリタ Mosh Part1【Lisp】
http://peace.2ch.net/test/read.cgi/tech/1272469779/
【魔法】リリカル☆Lisp【言語】
http://peace.2ch.net/test/read.cgi/tech/1183396621/
Lisp@UNIX版
http://mevius.5ch.net/test/read.cgi/unix/1019926525/
2018/07/15(日) 03:57:54.29ID:mQtsqebE
3デフォルトの名無しさん
垢版 |
2018/07/15(日) 04:45:43.53ID:+G2qeWeL
(Lisp 笑)
2018/07/17(火) 22:34:02.03ID:6cKB2nCo
>>1
2018/07/29(日) 18:08:39.36ID:bQEgGaK2
Racket の 7.0 が出た。
コアを chez に置き換える方向で進んでるんだね。
2018/09/08(土) 00:00:46.97ID:t7GfMYxV
a little schemer/「scheme 手習い」 https://www.amazon.co.jp/dp/4274068269/
を読んでいます(ずいぶんと時間がかかっています)が、次のプログラムがさっぱり理解できなくて困っています

第5章「*すごい* 星がいっぱいだ」
この章の最初の方までは困難を伴いながらも、なんとか理解できました、この章でのこんな感じのコードを、仕様をみて独力で書きおこすことはできています https://ideone.com/fPHC2z

ところが、p.92 から

>Q: eqlist? はなんですか。
>A: 2つのリストが等しいかどうかを決める関数です。…@

>Q: eqlist? は、その引数についていくつ質問をしますか。
>A: 9つです。…A

>Q: なぜ 9 つの質問があるか説明できますか。
>A: 自分の言葉で説明すると次のようになります。
>「各引数は次のいずれかです。・空リスト・アトムがリストに cons されたもの・リストが別のリストに cons されたもの
>たとえば、最初の引数が空になるのと同時に、2番目の引数は、空リストか、car の位置に1つのアトムまたはリストを持っています。…B

>Q: eqan? を使って eqlist? を書きましょう
>A: https://ideone.com/vjYCZ5

この解答例がさっぱりです、実はAからよくわかっていません
コードのコメントは私がつけたのですが、最後の方は混乱してしまって…何がわからないかわからない状況です。
何か理解するための手がかり足がかりヒントはないでしょうか?
2018/09/08(土) 01:10:14.26ID:VmsJpbI+
>>6
私はその本を持ってないのでそのあたりの問題を取り上げたブログ記事を見ながら説明しようかと思ったが、
その Q&A の通りとしか言いようがないんで、何がわからないのかよくわからない。 困ったな。

リストの先頭を見た時にあり得るパターンが 3 通りで、
l1 が 3 通りと l2 が 3 通りなら組合せは 9 通り。

9 通りのパターンは 3 種類に分類できて、

・ l1 と l2 の先頭が空リストなら真
・ l1 と l2 の先頭が一致すれば次の要素に対して再帰的に同じ処理をする
・ l1 と l2 の先頭が一致しないなら偽

となる。

実際のコードにするにあたって、空リストに car, cdr 手続きは適用できないんで、チェックの順番を気にするくらいかな。
2018/09/08(土) 05:07:37.63ID:GHaullf6
引数が2つあり、それぞれは3通りの場合があるわけだから
引数の組み合わせとしては3×3=9通りの場合がある。
※引数はリスト(空リストを含む)と仮定していいようだ。

愚直にこの9通りの場合分けを展開するとこの表↓のようになるので、それをそのままコードにしたのがその解答例。

A B 等しい?
() () #t
() (アトム . リスト) #f
() (リスト . リスト) #f

(アトム . リスト) () #f
(アトム . リスト) (アトム . リスト) (and アトム同士が等しい リスト同士が等しい)
(アトム . リスト) (リスト . リスト) #f

(リスト . リスト) () #f
(リスト . リスト) (アトム . リスト) #f
(リスト . リスト) (リスト . リスト) (and carのリスト同士が等しい cdrのリスト同士が等しい)
2018/10/07(日) 02:51:53.80ID:n2yn9/Ec
他のソフトウェアに組み込むスクリプト環境でTinySchemeを使おうかと思っているんですが
スクリプトの中からファイルIO関係の機能は使えないようにしたいです。
この場合、走らせるスクリプトの前に、open-input-file等のIO関係の関数を無害な関数で再定義する部分をくっつけてしまえばOKでしょうか?
2018/10/07(日) 14:31:36.10ID:77445U4A
>>9
なんらかの方法で元の定義にアクセスできたら脆弱性になっちゃうから、
要らないなら削除する方が確実だと思う。

どのくらい確実にするかってのは程度問題だけど
削除する分にはそんなに手間でもないし。
2018/10/07(日) 16:22:54.47ID:n2yn9/Ec
>>10
ありがとうございます。
削除というのは、その機能をSchemeのソースから削除して再コンパイルするということですか?
2018/10/07(日) 19:43:40.12ID:77445U4A
>>11
そう。
2018/10/08(月) 11:15:35.46ID:s+P1p206
>>12
ありがとうございます、やってみます!
2018/10/09(火) 08:07:54.35ID:dwdUWAaf
依存型についてのテキストが出てるよ。
Daniel P. Friedman, David Thrane Christiansen "The Little Typer"
Boro Sitnikovski "Gentle Introduction to Dependent Types with Idris"
Edwin Brady "Type-Driven Development with Idris"
Adam Chlipala "Certified Programming with Dependent Types"
Aaron Stump "Verified Functional Programming in Agda"
Idris と Pie言語 ではλ関数とπ関数が同じように導入されているので相互に勉強できるのがいい。
2018/10/09(火) 15:29:09.16ID:dwdUWAaf
π算法
Robin Milner "Communicating and Mobile Systems: The Pi Calculus"
Davide Sangiorgi, David Walker "The Pi-Calculus: A Theory of Mobile Processes"
Matthew Hennessy "A Distributed Pi-Calculus"
π算法はもともとCCSの拡張としてRobin Milnerらによって考案された、並行計算(π算法はλ算法の並行版)を表すモデルであり、プロセス計算の一種。
2018/10/11(木) 04:45:55.72ID:kRD0TmZA
A Little Taste of Types - Code Mesh 2017 - David Christiansen
https://www.youtube.com/watch?v=3z9nISI4ppw
A Little Taste of Dependent Types 2018 - David Christiansen
https://www.youtube.com/watch?v=1BWYy2-WM-o
2018/10/16(火) 23:34:54.71ID:D0vhWqBd
Gaucheのリファレンスマニュアル日本語版pdfはないのでしょうか?
2018/10/17(水) 01:03:06.73ID:BPtTatWV
>>17
Gauche のソースツリーの doc ディレクトリで make pdf コマンドを実行すれば、
pdf 形式のドキュメントのビルドプロセスが走ることになってるよ。
ただ、 TeX を使うみたいなんで、 TeX を導入するのが面倒ってことはあるかも。

公式からは PDF 形式の日本語マニュアルは出してないっぽいね。
1917
垢版 |
2018/10/17(水) 21:27:28.91ID:MYn8m29E
ありがとうございます。挑戦してみます。
2018/11/19(月) 21:32:10.84ID:Ebw/7CYM
はちみつ餃子しかいないスレになってしまった
2018/11/19(月) 22:07:56.77ID:FLKvqXWs
よく見ろ別人だぞ。
まさか同一人物なわけがあるまい。
2018/11/19(月) 22:58:27.29ID:EqyITMeu
話題がなさすぎるので近頃は C++ スレばかりにいるんだけど、
なんか面白い話題があればどんどん書いてよ。
2018/11/20(火) 01:03:10.36ID:Bz9DRyU5
そんなとこにいたら頭がガベージまみれになるぞ
2018/11/22(木) 08:37:23.04ID:idUjP7lK
東方算法騎士団ってどうやって入るの
2018/11/22(木) 11:14:07.32ID:PNeid+Qy
Jupyter with Schemeってどう?
2018/11/25(日) 11:38:51.25ID:yUG3gEBB
Try Jupyter で試してみ
2018/12/21(金) 18:19:35.67ID:2lFdE5qB
Gauche 0.9.7 がリリースされたよ〜

http://practical-scheme.net/gauche/download-j.html
2019/01/08(火) 17:40:17.47ID:n4V6aMpj
WindowsでMinGWがインストールされておらずMSVCだけある状態で
C言語のhelloworldプログラムでgauche.hをインクルードすると
gauche.h内の#include <sys/time.h>の部分でエラーになります。
C言語からGaucheを利用する場合はMinGWがインストールされていることが前提という解釈であっているでしょうか?
2019/01/08(火) 21:15:36.70ID:YHlgtmk9
>>28
はい。
Gauche をビルドするためには MinGW というか (MinGW を含めた開発環境であるところの) MSYS2 を要求しています。
https://github.com/shirok/Gauche/blob/master/doc/HOWTO-mingw.adoc
少し古いバージョンは (MSYS2 ではなく) MSYS を要求していました。

gauche.h もその開発環境に依存しているので、 gauche.h を include した C のコードは MSVC ではコンパイルを通りません。
つまり、 Gauche の拡張モジュールや Gauche を呼び出すプログラムを C で書こうとするなら、
Windows では MSYS2 を使う方法しか想定されていません。

ただ、過去に「VC++用ポート」を試みた記事が WiLiKi に残っていますし、
ある程度は動いていたようですので、手間を書ければ全く不可能なことというわけでもなさそうです。
https://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3AWindows%2FVC%2B%2B

Gauche の実態は単なる DLL ですから、Gauche 自体を MSVC でコンパイルするのは難しくても
Gauche を呼び出すプログラムを MSVC で作る分には頑張ればなんとかなる可能性は充分にあるように思います。
2019/02/01(金) 16:27:31.29ID:jPYNOX7L
Racket のコアを chez のに置き換える話が以前に出てたけど、
もうほとんどできたみたいね。
次のリリースあたりからはそれになるのかな。
2019/02/05(火) 04:44:00.67ID:VmiK9YL/
R7RS-Large の Tangerine Edition は議論・投票への参加者が少なすぎてちょっとアレな状況みたいね。
積極的に参加してあげて!
2019/02/08(金) 19:33:54.35ID:U10rELvE
界隈でなんだかちょっとだけ ISLISP の人気が出てきてるというか
ここ最近になっていくつか新しい実装が発表されてるんだけど、
使ってみた人いる?
2019/02/10(日) 03:09:59.76ID:ZBYYirVg
>>32
新しい実装ってどれのことよ?
2019/02/11(月) 02:00:38.22ID:eS7AzULV
>>33
Githubを検索したらこんなん出てきた
https://github.com/nenbutsu/kiss
https://github.com/ta2gch/iris
https://github.com/sasagawa888/eisl
2019/02/11(月) 03:37:14.19ID:JleTlNG9
日本製ばっかりなんだ
2019/02/11(月) 23:47:14.75ID:sKwQy+pT
そりゃ日本人が中心になって考えた規格だし
2019/02/12(火) 01:54:55.89ID:jYEPbswv
へー。 そうなのかと思って経緯を調べてみたりしてたんだが、
その過程で ISLISP の IS は International Standard の略だと見つけた。
id.nii.ac.jp/1001/00003362/
仕様にも書いてないから知らんかった。

もっと古い時代に STANDARD LISP という名前の Lisp があったそうで、
http://www.softwarepreservation.org/projects/LISP/stanford/Hearn-StandardLisp-AIM-90.pdf
それ故に標準化にあたって単に Standard とは名乗れず、
Common Lisp が Common Lisp という名前になったのもこのあたりの事情があるらしい。

単に名前を付けるだけでも変な苦心をしてるんだな。
2019/02/12(火) 02:23:54.71ID:xM7yD0R2
イスラミックステートLISP
処女とヤリまくれるらしいぞ!
2019/02/13(水) 00:07:17.42ID:VqRfiaP4
>>38
イスラミックステートにかけるなら、
支配地域が縮小してるらしいぞというところに引っかければよかったんじゃないかと思ったが、
縮小どころか元々たいして使われてなかったということに気づいた。
2019/02/13(水) 00:10:08.40ID:VqRfiaP4
>>39
大してして使われていない (少なくとも私の観測範囲では) と思ってるけど、
今後の発展があれば面白いなとも思ってることは付け加えておく。
(ディスってるわけじゃないんだからね! ってこと)
2019/02/14(木) 21:27:33.66ID:jKX9xayO
金払わないと正式な仕様書読めないのか、と諦めた記憶がある>ISLISP
ドラフト?は読めたけど
2019/02/15(金) 00:25:04.04ID:HfBEXCjq
>>41
ドラフトと正式版の差は誤字の修正程度だよ。
2019/02/19(火) 03:58:50.76ID:seNTvLzD
餃子はISLISPerなの?
44デフォルトの名無しさん
垢版 |
2019/02/19(火) 09:00:07.28ID:4kP+wC3u
Racketに対応したArcが出てたのね

Arc Forum | Tell Arc: Arc 3.2
http://arclanguage.org/item?id=20772
2019/02/20(水) 00:03:33.61ID:C98K3aY7
>>43
ISLISP には興味無いよ。
でも LISP 界に動きがあるのは歓迎するので、
どういう受け止められ方をしているのか聞きたかっただけ。
2019/02/20(水) 02:34:03.07ID:hNG331p8
>>45
ISLispってJIS規格になったんでしたっけ?
2019/02/20(水) 03:14:25.95ID:C98K3aY7
>>46
JIS の ISLISP は 1998 年の日付になってる。
2019/02/21(木) 00:45:26.47ID:vZ2CpAoq
>>47
お返事、ありがとうございます
そうですかISLispはJIS化されてたんですね
でも日本で使われてるんですかね? 
Lispで日本で使われてるのはやっぱりCommon Lispだと思うんですけど(それと教育とかだとScheme(含Racket)が少しあるかな)
2019/02/21(木) 01:05:58.63ID:9MRHAYbl
ISLISP のことはなんも知らんけど、
急に ISLISP 処理系が立て続けに出てきたみたいやから
なんか動きがあったんか? と思って >>32 を書いたんで、
私も質問者の立場なんやわ。

大した理由はないのであっても、
始まったならこのまま発展していくといいね。
2019/02/22(金) 06:25:30.84ID:6MhIDIeu
ISLispのプログラミングテキストや解説書って笹川賢一って人が書いたKindle用の電子的なのが2タイトルあるだけで
それ以外は海外でも何も出てないんですかね、Amazon USでタイトルを“ISLisp”で検索しても、その2タイトル以外は
ISOの規格票しか出てきませんね

とにもかくにも国際規格になったんだから、規格案をプッシュした連中がプログラミングの教科書や言語解説書や入門書ぐらいは
書いて出版するぐらいのことはやるべきなんじゃないかと思うんですが、見事なほどに何も出ていないようで驚きました
2019/02/22(金) 12:52:25.98ID:+Ub0CFOo
common lispとどれくらい違うん?
2019/02/22(金) 17:25:28.63ID:PAJj2OJU
>>51
Common Lisp の規模が大きくなってまとまらなかった中で
別の提案を整理して100 ページもないような規模の ISLISP を確立したという事情があるので、
完全なサブセットではないけど言語の考え方としては近い部分が多くて
かなり小さいサブセット「的」なものという感じ。

つっても、やっぱり別言語ではあるので、それを「どれくらい」とは一言では表せないな。
個人的には、あくまで私の感想としては Lua と JavaScript くらいの距離はあるかなぁ……と思ってる。
2019/03/05(火) 05:20:40.92ID:1ASLdeDU
昔の情報処理試験で人工知能の分野ときたらLispだったけど今違うのかな?
2019/03/05(火) 09:20:27.48ID:mHzXPPXa
>>53
このスレ (の過去スレ) では何度も話題になっている気がするが、
「人工知能」とは何か、それに「向いている」とはどういう意味かが曖昧なので、
Yes とも No とも言えるというのがおおよその結論。

人工知能を定義するなら「人間の知的活動を代行するもの」であり、
かつてはコンパイラや数式処理なども人工知能の範疇だった。
でも、分野として確立して以降は
コンパイラはコンパイラだし、数式処理は数式処理であって、
今ではそれを人工知能と呼ぶ人なんかいない。

逆に言えば分野として確立していない知的な処理はなんだって
人工知能なので、範囲がざっくりしすぎて
どんな言語が向いているかなんて言いようが無い。

強いて言うなら、かつては人工知能の主役は記号処理を基礎に据えたものであったので、
そのときの事情を前提にするならば、
それらを記述するには (当時あった他の主要な言語よりは) LISP が向いていると
言ってもそこそこ妥当ではあった。
2019/03/05(火) 20:46:21.78ID:XYJ+jVyT
人工知能でLISPを扱ってる本の巻末付録は大抵駅すぱあとシステムだからな
2019/03/05(火) 22:17:29.86ID:Wd2YNpFb
餃子がスゲー良いこと言ったな…
> 逆に言えば分野として確立していない知的な処理はなんだって人工知能
機械学習みたいないかにも人工知能っぽいものでも、人間が理解して理論的に確立してしまえばなんてことない在り来たりな技術になるんだろうな
2019/03/06(水) 03:45:46.67ID:7/fqDaVy
人工知能のカテゴリのひとつに「ルールベース」があるけど、
これって要するに if 文を並べて判断するようなシステムのことで、
現代的な感覚だと人工知能とは言わんよな。
ひとつのカテゴリとして名前を付けることすら馬鹿馬鹿しい。
(あくまでも現代の感覚で見ればという話なので、
当たり前のものにしてきた先人の努力を貶めるものではないことは断わっておく。)

そんなごく当たり前のプログラムも昔は人工知能と呼ばれていたんだから、
人工知能という言葉が指す範囲はとてつもなく広いし、今後も変遷を続けていくと思う。

結果的に LISP が人工知能の記述に「適していた」あるいは「適している」のが事実であってもなくても、
LISP が人工知能の記述を目指しているというわけでもないし、
(LISP 系言語は幅広いので特に人工知能を指向したものも有りはするかもしれないが)
主要な LISP 系言語は Python やら Ruby やらと並べても違和感のないごく普通の汎用言語なんで、
用途を限定してしまうような言説は、個人的にはあまり好きじゃないな。

使いたいように使っていいんだよ。
2019/03/06(水) 23:50:18.20ID:pTvDqBNf
>>57
> そんなごく当たり前のプログラムも昔は人工知能と呼ばれていたんだから、
> 人工知能という言葉が指す範囲はとてつもなく広いし、今後も変遷を続けていくと思う。

70年代前半だと数式処理(記号微分とか記号積分とか、特に記号積分はね)も立派な人工知能の一分野
ついでに言えば50年代後半だと今で言うコンパイラの研究も人工知能の1テーマだったらしい
2019/03/07(木) 00:08:40.76ID:3nOoPCck
>>58
はちみつ餃子がすでに書いてるのに
>>54
2019/03/08(金) 01:59:42.89ID:PoFzWHgZ
ごめん、見落としてた
2019/03/09(土) 18:08:55.14ID:AFl9pnGp
研究者や企業による実験段階+アルファまでAI
商品化され一般に流通したらIT
2019/03/20(水) 16:56:57.86ID:Cy24MG6x
>>61
👍
63デフォルトの名無しさん
垢版 |
2019/03/23(土) 22:34:59.05ID:xopjuNQ8
Scheme というか、Lisp のことを少ししか分かっていないんですども、μKanren を使ってみたくて
Sheme の処理系をインストールしたんですが Gauche、Guile、MT/GNU Sheme と、入れた全部
に assp がアンバウンドだと言われて動きません。

1.解決方法が分からなくて、自前で assp を書いて動かしてますが、本当はどうやったら assp が
使えるか教えてください。ライブラリをロードするのでしょうか?

2.せっかく書いたので、自前の関数の働きが本当の assp と同じなのか知りたいです。
みなさんならどのように書きますか? 最初に見つかったときに止める場合のセオリー
はありますか?

書いてみた関数:

(define (assp fn assoc)
(let ((rtn #f))
(for-each (lambda (x)
(if (not rtn)
(if (fn (car x))
(set! rtn x))))
assoc)
rtn))
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況