fc2ブログ

OCamlをつつく7-剰余演算。やっぱりあったのね。

四則演算とくれば、やっぱり剰余演算も気になるピヨ。そこで調べてみたピヨ。公式マニュアルが調べにくいので、ちょっとだけ苦労したよ。このマニュアル、何で基本を分かりやすく書いていないのかなぁ。 でも皆は心配する必要が無いピヨ。この記事を見て基礎を学習しよう。

let x = 10 mod 3;

日本語のコメントが使えないから不便ピヨ。それはさておき、皆分かったかな?念のために書いておくと、mod剰余算で割り算の余りを求める演算ピヨ。 皆これでバッチリだよね?うん。それじゃあ終わり。
スポンサーサイト



テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

何度もコメントしてごめんなさい。m(_ _)m マニュアルはやっぱりマニュアルで、関数型言語の基本を知っている人向けに必要最低限のことしか書いていないので、関数型言語初心者の方は本を買うか、せめてWeb上のまとまった記事を最初からきちんと読まれると良いのではないかと思います(検索すればわりとすぐにいくつかヒットします)。たとえばプログラミング初心者がC言語を勉強するとき、ANSI/ISO Cの規格書だけじゃ普通は無理ですよね?(^^; 最近では日本語のOCamlの本も何冊か出ていて頼もしいです。立て続けにお邪魔しました&頑張ってください!^^

どうもありがとう♪
でも、ちょっと誤解しているよ。
この連載は【初心者用】なので調べる過程を書いているんだ。
だから知っていて疑問点や間違った点を書いているんだ。
初めから正しい事だけを永遠と書いても初心者はとっつき難いし、書く必要が無いからね♪

はじめまして。ちょっと長文かつ辛辣になりますが、苦言を呈させていただきます。人は誰しも間違うことはありますし、それ自体は仕方無いことかと思いますが、そういう点を指摘されたときに、

> だから知っていて疑問点や間違った点を書いているんだ。

これはさすがに無いんじゃありませんか? 一連のエントリが、調べる過程でのメモ書きならそのように書くべきで、さも理解した人が教えるような書き方はいかがなものかと思いますよ。あと、いくつかプログラミング言語関係のエントリを読ませていただきましたが、関数型言語に関するエントリ、特にOCamlに関するエントリはひどいです。OCamlのコンストラクタに関するエントリの追記を例にとると

> あと、関数型言語では全てのものがシンボルであり、値そのものだからなんだ。

明らかに間違いです。一番それに近いと思われるLisp族の言語ですら、全てのものがシンボルであり、値であるなんてことはありません。

> 命令型言語では分類しているから関数とオブジェクトは別のものなんだけど、LISPとかの関数型言語で引数に関数をとる関数が普通に使えるのはそういった考え方の違いからなんだ。

これは全く意味不明です。命令型言語でも関数=オブジェクトな言語は普通にあります。関数型言語で引数に関数をとる関数が使えるのは、関数が単に「第一級の」値であるからです。

> だけど、OCamlはオブジェクト指向言語だからコンストラクタは型のようなもので、値(インスタンス)は別に存在するピヨ。

オブジェクト指向言語は全く関係ありません。そもそも、variantはOCaml以外でも、Haskell、MLなどの静的型付け関数型言語一般に存在する機能ですから。

といった具合です。また、他のOCaml関連エントリでもifに関して初歩的な理解の間違いがあったりと、全体的にちょっとこれは、といいたくなります。OCamlやLisp関連のエントリを見るに、インドリさんご自身が関数型言語に関しては初心者なのではありませんか?そのような状態で、わかったふりをした文章を書くのは百害あって一利無しだと思います。

あのね、みずしまさん。
初心者用という事は、関数型言語を知っている人用に書かないことを意味しているんだよ。
だから、なるべく関数型の概念を使用せずに説明しているんだ。
あと、これは連続記事だから前に書いていない事をかけないんだ。
だから文字列とかでも配列を使っていないんだよ。

それに仮にボクが初心者とすると、初心者が書いている事に一々その様なことを言うのかな?
そういう態度は止めておいたほうがいいと思いますよ。
解説スタイルは個人により違うんだからその点を踏まえていって欲しいな♪

> 初心者用という事は、関数型言語を知っている人用に書かないことを意味しているんだよ。
> だから、なるべく関数型の概念を使用せずに説明しているんだ。

私が指摘した箇所は、単純にそのようなこととは無関係に間違っている箇所なので、反論になっていませんよ。

> あと、これは連続記事だから前に書いていない事をかけないんだ。
だから文字列とかでも配列を使っていないんだよ。

これも指摘した箇所には関係ないですね。

> それに仮にボクが初心者とすると、初心者が書いている事に一々その様なことを言うのかな?

初心者に限らないですが、間違いを犯すことは自分も含め、よくあることですし、そのことをいちいち責め立てようとは思いません(初心者だろうが何だろうが、明らかな誤りを見つけたら指摘はしますが)。ただ、初心者(関数型言語の、という意味ですよ。インドリさんがプログラミング初心者だ、などとは思っていません)じゃないふりをして間違いが多い解説記事を書いておいて、間違いを指摘されたら、解説の都合上だ、みたいな逃げを打つのは問題があると考えています。正直、自分のようなOCamlなどの関数型言語にはそれほど明るく無い自分でも、インドリさんの関数型言語に関する理解の程度は怪しいと言わざるを得ません。

Re: タイトルなし

みずしまさんへ
残念ながら解説スタイルの違いを考慮して欲しいという意味がわかってもらえなかったようだね。
ボクが言っているのは間違いやすい点を解説する事であって、それを正しい事として解説するつもりは無いよ。
この記事は連載だから、少しずつ関数型言語の世界へ旅たつ事を目的としているんだ。
もし関数型言語を知っている人に対して記事を書くならば、関数型世界の用語で解説するだろうけど、関数型言語について知らない事を前提として書いている記事にはそんな関数型っぽい記事はかけないよ。
でもそんな事をすれば、英語を勉強するサイトが英語で書かれているようなものだよ。
みずしまさんの指摘の細かい部分に反論しなかったのは、論点がずれていると思ったからなんだ。
それに関数型言語のコンパイラを作ったとあれば察しがつく部分(たまには高度な内容も蒔いておかないとね)を分かってくれなくて指摘しているし・・・
みずしまさんがボクよりもOCamlについて詳しくても僕は一向に構わない。
ボクは自分が完璧超人だとは思っていないから「常に上には上が居て、そんなハッカーから比べたら僕は素人同然だ。」と考えているからね。
僕が言っているのは、関数型言語に慣れている人の視点で記事を書けといっているように聞こえた事についてなんだ。
関数型言語の正確な定義から外れても、なるべく分かりやすく抽象化して徐々に正確にしたほうがよいとボクは思う。
※他のスタイルについては他のサイトに任せます
正確さを求めるのならば、OCamlコンパイラのコードと仕様書を読めばいい話しだから僕はそうしたくないんだ。
「コードを仕様書を見ろ!」といえば一発だけど、そんなことしたら多くの人とOCamlを楽しめないよね?
僕の趣旨は細部は先ず無視して、OCamlを楽しみつつ学んでいって、OCamlを好きになってから細部を探ろうという事なんだ。

何だか私のせい?でややこしい話になってすみません。(><) インドリさんのような関数型言語初心者の方が、同じような初心者向けに楽しい記事を書いていただけることは、私もとってもうれしいです!^_^

でも、「どこからどう見ても初心者です。本当に(ry」という状態なのに、初心者でないふりをして明らかに間違ったことを断定的に書いたり、あまつさえ「わざと間違えたことにする」という今のスタイルでは、勘違いの拡大再生産をするだけで、せっかくの楽しい記事の台無しです。;_; 誰でもはじめは初心者なんですから(私なんか一生初心者かも…?)、別に無理をしてわかったふりをしなくても、自信がないところはよくわからないって言えば良いと思います! 「初心者向けだから間違った説明でも良い」とか、「不正確なほうがわかりやすい」とかいうのは正反対で、初心者向けだからこそ正確で誤解を招かない説明をしなければならないし、そのほうがずっとわかりやすいと思います。

文句ばっかり言ってすみません。(><) 私も自分でOCamlや関数型言語の楽しさが伝えられるように頑張ります!

Re: タイトルなし

> 何だか私のせい?でややこしい話になってすみません。(><) インドリさんのような関数型言語初心者の方が、同じような初心者向けに楽しい記事を書いていただけることは、私もとってもうれしいです!^_^
>
> でも、「どこからどう見ても初心者です。本当に(ry」という状態なのに、初心者でないふりをして明らかに間違ったことを断定的に書いたり、あまつさえ「わざと間違えたことにする」という今のスタイルでは、勘違いの拡大再生産をするだけで、せっかくの楽しい記事の台無しです。;_; 誰でもはじめは初心者なんですから(私なんか一生初心者かも…?)、別に無理をしてわかったふりをしなくても、自信がないところはよくわからないって言えば良いと思います! 「初心者向けだから間違った説明でも良い」とか、「不正確なほうがわかりやすい」とかいうのは正反対で、初心者向けだからこそ正確で誤解を招かない説明をしなければならないし、そのほうがずっとわかりやすいと思います。
>
> 文句ばっかり言ってすみません。(><) 私も自分でOCamlや関数型言語の楽しさが伝えられるように頑張ります!

いやだからそのスタイルで書いていると何度言えば分かるのでしょうか(溜息)
そう思っていただいても私は結構ですが、兎に角このスタイルで書き続けます。
プロフィール

インドリ

Author:インドリ
みなさん、はじめまして、
コンニチハ。

ボクは、無限の夢(infinity dream)を持つネタ好きな虹色の鳥インドリ(in dre)です。
色々な情報処理技術を啄ばむから楽しみにしてね。

http://twitter.com/indori
は別人による嫌がらせ行為です。
私とは関係ないので注意して下さい。
次はなりすましブログなどをするかもしれませんが、ここ以外でブログをするつもりがないので、ここ以外にインドリのブログがあったとしても無視してください。


何度言っても分からない人がいるので、ここにコメント欄へ書き込むときの注意事項を書きます。


一、社会人としてのマナーをわきまえましょう。
一、妄想に基づく書き込みを止めてください。
一、暴言の類は書かないで下さい。
一、某誹謗中傷サイトの書き込みは彼らの妄想に基づく書き込みですから無視して、ここへ書き込まないで下さい。
一、コメント書く前に他のコメントよく読んでから行って下さい。
一、言いがかかり等の行為を禁止します。
一、その他常識的に考えて迷惑なコメントはしないで下さい。


以上のルールを守れない人のコメントは削除します。



利用上の注意
ここに紹介してある文章およびプログラムコードは正確であるように心がけておりますが、内容を保証するものではありません。当サイトの内容によって生じた損害については、一切の責任を負いませんので御了承ください。


執筆したCodeZineの記事


【VB.NETで仮想CPUを作ろう】

  1. VB.NETで仮想CPUを作ろう
  2. レジスタの実装
  3. 仮想CPUのGUI化
  4. テストドライバの改良
  5. CPUの基礎動作の実装
  6. MOV命令の実装
  7. ADD命令実装
  8. SUB命令実装
  9. INC命令&DEC命令の実装と命令長
  10. MLU命令の実装とModR/Mについて
  11. DIV命令の実装とイベント設計について
  12. 機械語駆動式 関数電卓を作ろう!
  13. 機械語駆動式 関数電卓を作ろう! 解答編(前半)
  14. 機械語駆動式 関数電卓を作ろう! 解答編(後半)


【仮想ネットワーク実装でTCP/IPを学ぼう】
  1. TCP/IPの基礎と勘所
  2. ネットワークアクセス層の勘所
  3. インターネット層の勘所
  4. トランスポート層の勘所
  5. アプリケーション層の勘所
  6. セキュリティの基礎と仮想ネットワークの仕様
  7. GDI+と独自プロトコルの定義



【並列化】
インテル Parallel Studioを使って並列化プログラミングを試してみた
並列プログラミングの効率的なデバッグを実現する「Parallel Inspector」


【TBBシリーズ】
  1. インテル スレッディング・ビルディング・ブロックの概要
  2. インテルTBBから学ぶループの並列化
  3. スレッドセーフとインテルTBBのコンテナ
  4. インテルTBBのスレッドクラス


【OpenMPシリーズ】
  1. OpenMPの基礎構文
  2. OpenMPの実行時ライブラリと並列ループ
  3. OpenMPのメモリモデルとfork- joinモデル

最近の記事
最近のコメント
月別アーカイブ
カテゴリ
Ada (9)
COBOL (5)
C (9)
C++ (11)
C# (370)
D (25)
Java (8)
Perl (1)
Ruby (14)
PHP (2)
Boo (2)
Cobra (2)
LISP (6)
F# (33)
HTML (0)
XHTML (0)
CSS (0)
XML (0)
XSLT (0)
Scala (4)
WPF (0)
WF (2)
WCF (0)
LINQ (4)
MONO (5)
Linux (0)
MySQL (0)
ブログ内検索
リンク
最近のトラックバック
RSSフィード
ブロとも申請フォーム

この人とブロともになる

QRコード
FC2カウンター