見出し画像

Retro-gaming and so on

RE: プログラミング学習日記 2024/04/12〜

龍虎氏の記事に対するコメント。

 おお~・・生まれて初めてコンパイラでのプログラム実行したわ~

ああそうか、OCamlは直接触ってないのか。
Racketでもraco(Racketコンパイラ)は使ってなかったもんなぁ・・・パッケージのインストールだけ?
(もっとも、パッケージをインストールする際、コンパイルするが)

 しかし書き方がちょっと・・なんで行頭に}を持ってくるのか?構造がすごく分かりにくい気がするんだよなぁ・・



 試しに{}だけでも普通に包んでみる。これでもちゃんとコンパイルと実行は出来たのでケツの}}も(どうせエディタで対応してる{が発光するので)まとめたるべきやったな。別にインデントも関係なさそうなので自前で書くときにはRacket準拠の見た目になるように書いたろ。

ごめん(笑)。大爆笑してた(笑)。
そっか〜。Lispからプログラミングをはじめると波括弧の通常の置き方が「すわりが悪く」感じるかぁ(笑)。
もちろん、C言語を初めとしたこのテの構文は、通常フリースタイルなんで、どうカッコを置いてもいいです。
そうね、Pythonなんかでもブロック構造はインデントで記述するんで、なるほど、波括弧ってのは今までの経験上イマイチピンと来ないかも。
OCamlなんかでも波括弧使わなかったしね。
なるほど、C系避けてくるとそういう印象になるか(笑)。
ごめん、面白い(笑)。人間の感覚って面白いよな。

なお、RustでのFizzBuzzは次のように書いてもいいです。


何度か書いてるけど、Rustは「割にLispのように書ける」。結局、いっつも書いてるけどprintln!を何度も書くのはどーよ問題、ってのがあって(笑)。
このスタイルはRacketで言うとこういう事をやっている。

(for-each println (map (lambda (x)
           (cond ((zero? (modulo x 15)) "FizzBuzz")
              ((zero? (modulo x 3)) "Fizz")
              ((zero? (modulo x 5)) "Buzz")
              (else x))) (range 1 101)))

map以降で「FizzBuzzのデータ」を作って、それをfor-eachに渡して順次出力する。
こんなカンジでLispっぽく書けはするんで、色々と試してみるのが吉。
ちとオブジェクト指向っぽいんで、Rustではrange(1 101).map(lambda ...)...みたいに内側と外側が逆になるような記述になってるけどね。ただ、このテの表記はRubyやJavaScriptでは良く見られる書き方だ。関数を連鎖するんじゃなくって「メソッドを連鎖」する。そのまんまメソッドチェーン、と呼んだりする。見た目は異質だけど、やってる事は関数型言語っぽいんで、多分慣れるでしょう(笑)。
ただ、上記のRustコードは「型変換」でto_string()が頻出なのがイマイチなんだけど、この辺はどうしようもない。
Rustではまず、"..."と言う記述は&strって事になっててString型とまた違うんだよな。そしてラムダ式(|x| ...)で受けたxは数値となる。Rustは「強い型付け言語」なんで、if ... elseが返す型は全部一致してないとならない。結果、どうしても「面倒くさい」型変換をして全部の型を同一にしないとどうにもならなくって、ハマったりすんの。実際ハマってたし(笑)。
ちょっとその辺がね。Lispと言うよりOCamlに近くって、動的型付けに慣れてると「アレ?」って言うのが頻出するのがRustと言う言語です。
  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「RE: プログラミング学習日記」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事