パスワードを忘れた? アカウント作成
693865 journal

nekoie02の日記: - 2

日記 by nekoie02

2003-01-23

* work: サラ猫が電話線を噛み切る。
夜中の仕事中に。
突如ネットへの接続がオフラインとなり、調べた結果、原因はサラ猫であった。
夜中仕事はコレにて中止。続きは明日。

* misc: 新しい電話線を買ってきた。

2003-01-22

* scheme: λの手習い更新。
http://d.tir.jp/tb/tenarai/
他の言語で遊んでいる時よりも数倍は楽しいλ言語(当社比)。
何故こんな怪し楽しいんだλ言語!

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Jadawin (2174) on 2003年01月24日 3時22分 (#242356) 日記
    丁寧に書いてるとてーへんなので、まず改定案。

    #を、書くつもりだったが、投稿フィルタが許してくれない。

    1. 手続きの書き方

    defineの直下のlambdaは、簡略化できる。 手続きの引数の書き方をチェクし
    て下され。

    2. let

    letの変数定義の部分は、複数の変数を定義できて、後の変数で前の変数を参
    照する場合には、let*を使う。letrecは、相互参照する複数の手続きを定義す
    る場合以外には、おそらく使う必要はない。

    3. named-let

    letrecで内部手続きを定義するのと、手続き内部でdefineで内部手続きを定義
    するのと、named-letを使って自己参照を行うのは似ている。

    4. if/cond

    Schemeの基本はifだが、lispの基本はcond。ifのelse式、condのelse式の部分
    には、複数の式を書けたはず。それがいやならletではなくprognを使うとか。
    (prognは、副作用を持つ複数の式を並べるのに使うのが普通)

    でも、副作用のたいていは、内部手続きやnamed-letへの引数で処理できる。
    • ややっ、これはどうもありがとうございます。

      > defineの直下のlambdaは、簡略化できる。
      コレは知っているものの、何となく省略しない書き方の方が
      自分が混乱せずにすむような気がしたので、今はあえて省略
      していないのです。
      (未来に書き方をかえるかどうかは多分その時の気分次第。)

      > letrecは、相互参照する複数の手続きを定義す
      > る場合以外には、おそらく使う必要はない。
      これは、単なる自己再帰の場合はletだけでいける、と、
      解釈したのですが、自分の書いたスクリプトのletrecを
      letに直すと、未定義エラーになってしまいました。
      と思ったら、名前付きletなら、ちゃんと動きました。

      > lispの基本はcond。ifのelse式、condのelse式の部分
      > には、複数の式を書けたはず。
      > それがいやならletではなくprognを使うとか。
      なるほどです、順序制御にはprognを使うのですね。
      (ちなみに、自分の使っているscheme実装のgaucheでは、
       prognの代わりにbegin、prog1の代わりにbegin0という
       名前になってました)

      どうもありがとうでした。
      親コメント
typodupeerror

海軍に入るくらいなら海賊になった方がいい -- Steven Paul Jobs

読み込み中...