2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

関数型言語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
名前: E-mail (省略可) :

read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★