kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

racket

ゲーデルの不完全性定理の証明のアレをRacketで書いてみる (32)

では #lang typed/racket 動くだけは動いたりするかな?

Typed Racketのお勉強 (12)

7 Optimization in Typed Racket Typed Racketは型の情報を活かして最適化を行います 最適化を止めるには#lang typed/racket #:no-optimizeを使う RealよりもFloatといったように、型を具体的に指定すると効果的 リストがnullでないことがわかっている場合は…

Typed Racketのお勉強 (11)

6 Typed-Untyped Interaction Typedじゃない普通のRacketの関数からTyped Racketの関数は普通に呼べます Typed RacketからRacketの関数を呼ぶにはrequire/typedで型を指定してやります #lang racket (provide (struct-out pt) distance) (struct pt (x y)) (…

Typed Racketのお勉強 (10)

5 Occurrence Typing Occurrence Typingとはあまり聞き慣れない言葉 さらっとぐぐってみましたがそれっぽい言葉は見つかりませんでした あまり普及してない概念なのかもしれません Typed Closureってやつでも出てくるようです 無理に訳そうとせず進みます な…

Typed Racketのお勉強 (9)

4 Types in Typed Racket (続き) もうちょっと調べないともやっとするな・・・ 前回よくわからなかったのがこれ B ... BのふたつめのBがどうして必要なのかわからない (: fold-left (All (C A B ...) (-> (-> C A B ... B C) C (Listof A) (Listof B) ... B …

Typed Racketのお勉強 (8)

4 Types in Typed Racket (続き) Rest argumentsの単純なケース (この前もちょっと出てきてましたが) *で0個以上の繰り返しであることを示してます (: sum (-> Number * Number)) (define (sum . xs) (if (null? xs) 0 (+ (car xs) (apply sum (cdr xs))))…

Typed Racketのお勉強 (7)

4 Types in Typed Racket (続き) Typed Racketはパラメータ多相にも対応しています Maybeモナドっぽいもの (struct None ()) (struct (a) Some ([v : a])) (define-type (Opt a) (U None (Some a))) (struct (a) ...)は型aを引数に取った型の定義 型だけ作っ…

Typed Racketのお勉強 (6)

4 Types in Typed Racket (続き) いくつかの型を取る可能性がある変数や関数はUnion型になります > (if (even? 37) 'yes 'no) - : Symbol [more precisely: (U 'yes 'no)] 'no 'yesや'noを返す、っていうところまで見てるんですねえ ってそういうの見ないと…

Typed Racketのお勉強 (5)

4 Types in Typed Racket 主な基本型はInteger, Flonum, String, Char, Boolean, ->(関数)あたりですが なんか妙に細かい型があります 数値型にPositiveとNegativeがある、くらいは理解できますが こないだ出たZero型、One型の他にもTrue型とかある、という…

Typed Racketのお勉強 (4)

3 Specifying Types の続き (let ([x : Number 3]) (add1 x)) は、こういう風に書くこともできます (let ([#{x : Number} 3]) (add1 x)) こちらの書き方を使うと、前者の書き方に対応してない式でも 型を示すことができます (: assert-symbols! ((Listof Any…

Typed Racketのお勉強 (3)

3 Specifying Types の続き 前回、型を指定しないで定義したidの型を見るのを忘れてました > (define (id z) z) > id - : (-> Any Any) #<procedure:id> Any型というのがあるんですね 次はlambdaの修飾 > (lambda ([x : Number]) : Number (+ x 5)) - : (-> Number Number)</procedure:id>…

Typed Racketのお勉強 (2)

3 Specifying Types :を使った修飾は値の定義やローカルの定義でも使えます (let () (: x Number) (define x 7) (add1 x)) たいていのバインド式は式の中でも型を書けるようになっています (define x : Number 7) (define (id [z : Number]) : Number z) ど…

Typed Racketのお勉強 (1)

Typed RacketはRacketに型を付けたものです The Typed Racket Guideを見ながら勉強していきます 詳細はThe Typed Racket Referenceに 1 Quick Start とりあえずこれをやれと ソース先頭の#lang racketを#lang typed/racketに変える (require mod)を(require …