関数型言語ML (SML, OCaml, etc.), Part 7
1 :デフォルトの名無しさん :2017/11/01(水) 17:25:35.48 ID:6Qf19YDf.net 関数型言語MLについて語るスレッドです。 MLは、確固とした理論的背景を持つ言語でありながら、 現実的なソフトの開発にも使用できる実用性を備えた言語です。 また、プログラミングの初心者が最初に学習する言語としても優れています。 総本山 Standard ML http://www.smlnj.org/ Objective Caml http://caml.inria.fr/ocaml/ 前スレ 関数型言語ML (SML, OCaml, etc.), Part 6 http://mevius.2ch.net/test/read.cgi/tech/1245017721/
2 :デフォルトの名無しさん :2017/11/02(木) 23:10:57.91 ID:Mt5L/GRL.net >1おつ
3 :デフォルトの名無しさん :2017/11/03(金) 00:13:58.21 ID:x8xGydv8.net Standard ML の方言 Mythril https://mythryl.org/index3.html Standard MLとの構文的違いの一覧表 https://mythryl.org/my-SML_vs_Mythryl_Fragment_Equivalence_Table.html
4 :デフォルトの名無しさん :2017/11/03(金) 00:17:37.47 ID:sl8NUeaa.net ガンダルフ?
5 :デフォルトの名無しさん :2017/11/03(金) 20:36:09.16 ID:ymVoOBdW.net >>3 他はともかくunitをvoidと呼ぶのは怒る人出てくるんじゃないか
6 :デフォルトの名無しさん :2017/11/19(日) 21:10:55.07 ID:LFvGirUA.net 下らない質問なんだけど mlで三項以上の演算子ってどうやって定義するの?
7 :デフォルトの名無しさん :2017/11/19(日) 22:20:16.29 ID:FtsW9SXJ.net (?) c t = if c then const t else id (:) f x = f x
8 :デフォルトの名無しさん :2017/12/21(木) 03:40:36.49 ID:s3fe5nPo.net https://reasonml.github.io/ Facebook がこんなの作ってたんだな。
9 :デフォルトの名無しさん :2017/12/23(土) 11:24:33.44 ID:Z7ru8RJK.net >>8 ちょっと見てみたけどOCamlとJavascript知ってれば、すぐに使えそうでいいね
10 :デフォルトの名無しさん :2017/12/28(木) 09:57:11.71 ID:H09IESsG.net 関数型って変数が定数になっただけ?
11 :デフォルトの名無しさん :2017/12/28(木) 17:39:41.34 ID:N/80jHgY.net すべてを関数と見なすだけ 定数も「定数を表す関数」と見なす immutableかどうかは別の話
12 :デフォルトの名無しさん :2018/03/19(月) 08:51:02.12 ID:TWWfpY71.net 初心者質問いいですか ocamlコマンドでスクリプトみたいにコード走らされるけど、coreを使った途端できなくなりました。 追加でコマンドオプションが必要なのでしょうか?
13 :デフォルトの名無しさん :2018/04/15(日) 20:58:24.01 ID:mzyYtY7f.net ocamlは見た目がキモいですね😱
14 :デフォルトの名無しさん :2018/05/23(水) 20:56:35.31 ID:Au5e7VGg.net 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方 役に立つかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 KDJWC
15 :デフォルトの名無しさん :2018/06/14(木) 23:29:58.98 ID:B3Vc0RRX.net fableってのが面白そうだ・・・F#からJavascriptに変換してHTML5アプリとか作れるらしい 時間ができたらいじってみようかな
16 :デフォルトの名無しさん :2018/06/15(金) 03:28:33.32 ID:k+eJbyVg.net bucklescriptでよくない?
17 :デフォルトの名無しさん :2018/06/18(月) 09:10:34.40 ID:QNagypIW.net おい!あの岡部健(毛の壁)がgithubで活動を再会してるぞ!
18 :デフォルトの名無しさん :2018/06/23(土) 03:37:58.67 ID:ADF05MCP.net OCamlで質問なんですが、1つのリストに対してmapしてfilterして、またmapしてみたいなことをするとき、 新しいリストがその度に、上の例で言うと3回作られるという認識であってますか?
19 :デフォルトの名無しさん :2018/06/23(土) 07:35:44.96 ID:0Hl7KNt9.net 合ってる それにクロージャを渡すだけでも結構コストがあるので 自分でループ書いたほうが効率がいい
20 :デフォルトの名無しさん :2018/06/23(土) 13:51:31.94 ID:ADF05MCP.net やっぱりそうですか ありがとうございます Haskellと違い正格評価なのだから当たり前ですよね 素直にループで書きます
21 :デフォルトの名無しさん :2018/06/23(土) 15:36:45.70 ID:YdqEOOC0.net Stream使えばいいんじゃない
22 :デフォルトの名無しさん :2018/06/23(土) 17:36:50.91 ID:ADF05MCP.net >>21 ありがとうございます 調べてみます 関数型はHaskellから入ってml系は知らないので、ちょっとずつ慣れていきます
23 :デフォルトの名無しさん :2018/06/23(土) 20:53:37.01 ID:YdqEOOC0.net Stream用のmap、filter、foldは標準では無いから、とりあえずはここのStream combinatorsからコピペして使ってね https://ocaml.org/learn/tutorials/streams.html
24 :デフォルトの名無しさん :2018/06/25(月) 08:12:48.99 ID:q4Puu0mx.net OCamlの関数定義で型を記述するのって、あまり良くないスタイルですか? 同じく型推論してくれるHaskellだと、型を書くのが推奨されてるみたいですが
25 :デフォルトの名無しさん :2018/06/25(月) 14:25:12.68 ID:NzmJfW7/.net ocamlはスタイルの良し悪しを言えるような綺麗な構文してないし 人のコード見てもまちまちなんで、好きに書けばいいよ
26 :デフォルトの名無しさん :2018/07/03(火) 07:11:09.58 ID:GD+nzmMH.net ocamlってどうやって勉強していけばいいんだろ 参考になりそうなコードとか全然見つからないし 「プログラミング in OCaml」か「Real World Ocaml」のどっちかを読めばいいのかな
27 :デフォルトの名無しさん :2018/07/03(火) 07:46:19.26 ID:GD+nzmMH.net jane streetのcoreのList.mapってoption付きのリスト返すの?
28 :デフォルトの名無しさん :2018/07/03(火) 20:59:55.35 ID:GD+nzmMH.net おっとOCamlだった😝
29 :デフォルトの名無しさん :2018/07/05(木) 00:57:09.40 ID:RfoszcD2.net NTB
30 :デフォルトの名無しさん :2018/08/24(金) 20:33:51.35 ID:TjjxpHXro Ocamlでレコードを定義した後、フィールド名の一覧を表示させる方法はありますか? 例えば「type gakusei_t {namae : string ; tensuu : int ; seiseki : string; }」というレコードを作成した後で、gakusei_tが持つフィールド名の一覧を表示させるための構文とか関数がOCamlで用意されているのでしょうか?
31 :30 :2018/08/25(土) 10:27:32.48 ID:A4JTLwzFR >>30 で例文が間違えてましたorz(=が抜けてた。) OCamlで「type gakusei_t = {namae : string ; tensuu : int ; seiseki : string; }」というレコードを作った場合でした。 このレコードgakusei_tのキーの一覧(namae, tensuu, seiseki)を取得する方法、関数などが用意されているのでしょうか? PHPで言えば連想配列のキーの一覧を取得する関数「array_keys()」に相当する機能です。http://php.net/manual/ja/function.array-keys.php
32 :デフォルトの名無しさん :2018/08/31(金) 17:17:33.76 ID:9cEIfGRg.net Ocamlで書いた関数はどこまで()を省略していいのか 試行錯誤な気がする。
33 :デフォルトの名無しさん :2018/09/05(水) 19:17:32.47 ID:6/0ZHi8J.net 省略するぐらいなら全部付けとけ begin endも混ぜると対応のエラーチェックも期待できるぞ
34 :デフォルトの名無しさん :2019/05/11(土) 10:46:27.70 ID:uCzBZMLg.net Standard ML of New Jersey v110.85 での話なんですが, exception NO_MEMBER; fun nth n [] = raise NO_MEMBER | nth 1 (a::_) = a | nth n (_::b) = nth (n-1) b ; と,リストのn番目(先頭1)を取り出す関数を作って, val third = nth 3; と3番目を取り出す関数を作ろうとすると, Warning: type vars not generalized because of value restriction are instantiated to dummy types (X1,X2,...) と怒られますが,なんか回避策あるんでしょうか? 当然,fun third x = nth 3 x; は大丈夫だけど,引数つけずに定義して やりたかった.
35 :デフォルトの名無しさん :2019/08/15(木) 02:29:49.06 ID:km/ot4Ek.net ちょいと質問 Haskelは再代入禁止と言う割にはモナドで誤魔化してる感もあるし モナドだとボックス型のパフォーマンスが極端に悪い(が使わざるを得ない)しで どうも好きになれなかったんだけど そもそもあまりにも使いづらすぎる我慢大会かと Ocamlはその辺うまく解決してるのかな? なんか上の方見るとクロージャを展開できてないような気もして大丈夫かと思ったりもするけど CLOSで遊ぶのとどっちがためになるかな? ふわふわした質問でゴメン
36 :デフォルトの名無しさん :2019/08/15(木) 02:34:51.29 ID:km/ot4Ek.net そうそうCLOSだと厳密なカプセル化はされてなくて 各インスタンスの変数にダイレクトにアクセスできるかのように読めたのだけど それが本当だとしたら非常にまずいことだけど Ocamlだとどうなってるんだろうっていうのも気になってる 正しくないオブジェクト志向(not指向)だったらいらんよね・・
37 :デフォルトの名無しさん :2019/08/28(水) 13:00:01.20 ID:Vwn2kMC/.net F#スレがやられたようだな ここでやるか?
38 :デフォルトの名無しさん :2019/09/01(日) 00:36:10.57 ID:3Spoi/4/.net >>35 副作用有ろうが無かろうが、呼ばれる関数からすればいつ、どんな値が来るか分からないと言う意味では同じなのよ。 なので、入り口だけ副作用有る関数はモナド使えば、それ以降は副作用の無い関数と同じにしようってなってる。 遅いのは認める。 関数の外から値が渡される ↓ f x = "hello" ++ x 外部入力から値が渡される ↓ readLine >>= /x -> "hello" ++ x 無限ループの発生源?を最小化して、関数化を進めやすいのは遅延評価の特徴。 import Data.List import System main = mapM_ put $ zip hellos marks hellos = (cycle.tails) "Hello World!!" marks = cycle ["/","|","\\","--"] put (x,y) = do putStrLn (x ++ "\n" ++ y) mapM_ (\_ -> putStr "") [1..50000] system "clear" cycle xs = xs ++ mycycle xs
39 :デフォルトの名無しさん :2019/09/01(日) 00:53:30.18 ID:sYwYgS29.net 圏論ωωω
40 :デフォルトの名無しさん :2019/09/25(水) 02:27:32.03 ID:sYvLX1uW.net そのへんはどうみてもhaskellのほうが考えられてる MLは別に力入れてない
41 :デフォルトの名無しさん :2019/09/25(水) 02:27:52.71 ID:sYvLX1uW.net >>36 な
42 :デフォルトの名無しさん :2019/09/25(水) 14:10:29.52 ID:/4tfHXau.net 真のオブジェクト指向は、全てのオブジェクトが独立していてメッセージをやり取りすると言う事のみ printと言うメッセージが飛んで来たら何かをprintすればいいだけ ほとんどの言語はメッセージの送信は関数呼び出しになってるけど、CLOSはslot(いわゆるメンバ変数)へのアクセスも必ず関数(総称関数)呼び出しが必要で、ある意味真のオブジェクト指向と言える そして、その関数をexportしなければslotにアクセス出来ないので、private変数の様な事はちゃんと出来る
43 :デフォルトの名無しさん :2019/10/25(金) 11:26:03.22 ID:oht2SJJg.net 久々にReal World OCamlのサイトみたら2nd Edition準備中なんだ。 https://realworldocaml.org/ サイトがめちゃくちゃ見やすくなってて良い感じ。
44 :デフォルトの名無しさん :2020/03/01(日) 09:25:45.35 ID:JWAFHnbA.net 言語仕様とか理論とかは知らんがhaskellって mapM_ とか putStrLn とか \_ とか なんかそういう細かいとこで見た目がイヤ
45 :デフォルトの名無しさん :2020/03/01(日) 14:40:02 ID:upDpA/6g.net 見た目が嫌いなら仕方ない。 私も見た目でPrologはどうしても愛せなかった。。。
46 :デフォルトの名無しさん :2020/03/01(日) 15:19:00 ID:IAGr/PH/.net Alpha Lab|学術巨大掲示板群 x0000.net
47 :デフォルトの名無しさん :2020/03/01(日) 15:22:58 ID:IAGr/PH/.net simulationライブラリで純粋な関数式プログラミングを (純粋な関数式とは、状態あり変数も関数式だ) ttp://x0000.net/topic.aspx?id=3631-0
48 :デフォルトの名無しさん :2020/05/03(日) 17:10:38.26 ID:ioRfHtLv.net 関数型言語で数値計算するならOcamlかなぁ?
49 :デフォルトの名無しさん :2021/01/12(火) 18:37:52.42 ID:6w9txZHV.net ocamlは;がキモくなければHaskellの代わりにバズれたと思う
50 :デフォルトの名無しさん :2021/01/15(金) 02:58:21.61 ID:Hai3vgIl.net >>48 速くて有名な数値計算ライブラリは大体fortran、次いでocaml(cトランスパイラ)製だし(fftwとか c直書きで最適なコード書くのなんて人間には不可能なんだろう
51 :デフォルトの名無しさん :2021/01/15(金) 21:45:59.26 ID:lcwEKr0P.net そもそもHaskellはバズっているのか? 実用性に乏しいけど、見下したい人が我慢して使ってる印象
52 :デフォルトの名無しさん :2021/01/27(水) 11:13:03.05 ID:bXbG36lK.net Haskell 何年か前には確かにバズってた、 みんなモナドについて熱く語ってた(個人の感想) 今はあんまり聞かなくて寂しい…
53 :デフォルトの名無しさん :2021/02/18(木) 08:08:11.33 ID:2agUMJ25.net 型指向プログラミング入門にはHaskellは良いと思うよ 代数はあんまり好きじゃない、というか役に立つかよく分からんのでそっちじゃないだろ感はあったけど 広く括ればML系列なんでにわか人気でも悪い気はしないが
54 :デフォルトの名無しさん :2021/02/18(木) 08:31:52.28 ID:2agUMJ25.net >>36 いまさらのレス感あるが、たまたま目についたので… lisp族は関数型オブジェクト指向GC継続AI論理型パターンマッチ等々、おおよその概念の走りというだけ というかこれだけ挙がるということ即ち無節操 形から入るには全く向いていない CLOS/MOPは未だに最も強力なシステムだと思うけど、既に確立されてる型/OOP理論とは相反するところがあるし、むしろブチ壊す側 ML系のガチガチ制約を矯正ギプスとしてベストプラクティス&洞察力を養いたいという目的には向いてない
55 :デフォルトの名無しさん :2021/02/18(木) 08:37:50.68 ID:2agUMJ25.net まあ向上心があるのならlispインタプリタ書くチュートリアルは一度やっておくべきだと思う MLお家芸のパーサ書きにも資する
56 :デフォルトの名無しさん :2021/02/18(木) 23:46:57.08 ID:vv37pWaX.net CLはもう極端な動的さ以外に特色はないんじゃないか?
57 :デフォルトの名無しさん :2021/02/19(金) 04:14:17.89 ID:MujNk0Cy.net まあそうだね、schemeは縛りがキツイからアナーキーにやりたいならclって感じ あとOOP使わず型(最適化ディレクティブとしての型)付ければCと同等のベンチ叩き出すとか
58 :デフォルトの名無しさん :2021/02/19(金) 04:35:24.37 ID:MujNk0Cy.net 標準文法は決まってるけど、lexerとparserを弄る&乗取る組み込み関数が提供されてて規格より優先順位高いからから、例えcやsqlのコードでも規格準拠のと言い張れたりする そこまでするなら普通にlexer/perser書いて…言語処理系書けよって話だけど 一部lispで直感的に書きにくいとか、そういう時に/regex/とか{key: val}とか[start:stop:step]のような、モダンっぽいリテラルを簡単に定義できるのは便利
59 :デフォルトの名無しさん :2021/03/08(月) 15:26:00.22 ID:H4OoIpXQ.net 一文字読む毎にその文字に対応する関数呼び出して全権移譲してるんだよな… さすがにコンパイル時にはユーザー定義で上書きした文字以外はヒューリスティックだろうけど 楽しそうではあるけど言語自体を拡張するよりML式に代数的データ型とパターンマッチでDSL書いた方が早い
60 :デフォルトの名無しさん :2021/03/08(月) 15:52:44.32 ID:H4OoIpXQ.net ちょっと調べたら組み込み関数で先読みは一文字まで? (set-macro-character #\[ (get-macro-character #\( )) で[角張った りすぷ) ;; #\(に標準で割り当てられてるマクロ関数が探す終端文字はもちろん#\) ;;なので手抜きだとこうなる (set-macro-character #\# 改行文字までread-char読み捨て) # シバンとして読めるコメント文字を定義すると便利そう? set-dispatch-macro-...で一文字目の文脈で二文字目を解釈 だとしたらcライク構文をlispコードとしてパース/評価までやるのは結構大変なんじゃ もちろんread-charじゃなく単語単位のトークン分割(標準文法のread関数)、先読みはpeek-char関数を使うとか バックトラックは評価器に渡す前にバッファに溜め込んでおくとか考えられるが あんまり詳しくないんで違ってたらすまん
61 :デフォルトの名無しさん :2021/04/01(木) 22:53:33.90 ID:3PJTysR/r リクルートグループ、週休「約3日」に。4月から年間休日を145日に増加へhttps://www.businessinsider.jp/post-231540 リクルートの”週休約3日”に「うらやましい」「一般化して」などの声 年間休日145日でも給与は変わらずhttps://news.careerconnection.jp/?p=113498 リクルート、4月から週休約3日に‐理由を問わないリモートワークも全社に導入https://news.mynavi.jp/article/20210318-1814293/ 驚異のテレワーク率「9割超」 営業利益16倍の企業は、生産性が「下がった」社員をどのようにケアしたのかhttps://www.itmedia.co.jp/business/articles/2102/04/news010.html 週休3日で700社以上の働き方改革を支援し、年収3倍となった 「Caster Anywhere」事業責任者 越川慎司の新刊が1月28日発売https://prtimes.jp/main/html/rd/p/000000131.000012003.html 週休3日なのに年収を3倍にした男性の「時短術」https://news.yahoo.co.jp/articles/090b7e720c2e8c6fb0d524b67a40182f70d8fdf2 “週休3日制”導入で売上4割増の例も…日本企業で普及期に、週30時間が常識にhttps://biz-journal.jp/2020/01/post_138414.html 「 リモートワークで手放すべき7つのこと」働き方改革の先の世界https://tebanasu-lab.com/interview/9828/ 日本初「週休4日制度」で、優秀な人材を採用するしくみとは? ?ナレッジソサエティ久田社長に聞いてみたhttps://web.all-in.xyz/upgrade/knowledgesociety-2/
62 :デフォルトの名無しさん :2022/01/12(水) 10:26:17.27 ID:ZZU00ODL.net Twitterの検索で @ohagiya @kenokabe UCLA と入れると楽しいよな
63 :デフォルトの名無しさん :2022/11/26(土) 20:46:31.99 ID:9B2aEYlu.net プログラミング in OCaml 〜関数型プログラミングの基礎からGUI構築まで〜 と プログラミングの基礎 (Computer Science Library) と コンピュータを操る: プログラミングを通して「情報科学的なものの考え方」を学ぶ (Computer and Web Sciences Library) いずれかあるいはいくつか読んだことがある方、感想を教えていただけませんでしょうか。 関数型プログラミングにひたったことはないけれど若干知っている、程度なのですが今後のプログラミングや文章を書くときの指針にこの辺りが役立ちそうに思っています。
18 KB
新着レスの表示
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★
本文 スレッドタイトル 投稿者