Upgrade to Pro — share decks privately, control downloads, hide ads and more …

racket言語解説

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for yuyays yuyays
July 23, 2025
92

 racket言語解説

Avatar for yuyays

yuyays

July 23, 2025
Tweet

Transcript

  1. racket 言語 • 関数型 • 静的型付けも利用可能(Typed Racket) • DrRacket と呼ばれる開発環境

    • lisp 系統 ( カギカッコ ) • Parser, interpreter( パ ー サ ー インタプリタも書ける )
  2. Linked list での比較 class Node: def __init__(self, data, next=None): self.data

    = data self.next = next Node(8, Node(4,None)) (struct Node ([data: real) [ next: numlist] (define-type Numlist(U Node `mt)) Node(8, Node(4,`mt)) cons(8 (cons 4 `())
  3. List • 基本的にすべてのデ ー タは Immutable(変更不可)なので再起で回してアクセスして料理する • Cons, `( バッククォ

    ー ト ) を使用 • `() 空のリスト • 例) • (cons 1 '()) ; => '(1) • (cons 1 (cons 2 '())) ; => '(1 2) • (cons 'a (cons 'b '())) ; => '(a b) • (cons 1 (cons (list 2 3) (cons 4 '()))) ; => '(1 (2 3) 4) • `(1 2 3) ; => '(1 2 3) • `(a b c) ; => '(a b c) • (list 1 2 3)
  4. Match • リスト構造体その他のデ ー タ型を分解するためのパタ ー ンマッ チ • 例)文字列の逆順にして連結を求める関数

    • [“ball”, juice”] -> “juiceball (define (rev-str-app [L : (Listof String)]) : String (match L [`() ""] [(cons f r) (string-append(rev-str-app r) f)]))
  5. (define (rev-str-app [L : (Listof String)]) : String (match L

    [`() ""] [(cons f r) (string-append(rev-str-app r) f)])) [`() ""] -> もしリストが空なら , からのリストを返す [(cons f r) (string-append(rev-str-app r) f)])) cons(f r) では与えられたリスト L が最初のアイテム fと残りのアイテム r に destructure(取り出されている) それで cons(f r) でリストがそのような形にあてはまるなら , string-append というライブラリ関数に rev-str-app にrを与えたものをfに連結する
  6. python と比較 def rev_str_app(L: list[str]) -> str: if L ==

    []: return "" else: f, *r = L return rev_str_app(r) + f
  7. condition • 条件 (if, else, when 等 ) • 例)リストと数値

    n を受け取り 、 リストの最初の n 個の要素を返す関数 • `(`a `b `c `d) 2) -> `(`a `b)) (define (my-take [L : (Listof Any)] [n : Real]) : (Listof Any) (cond [(empty? L) `()] [(= n 0) `()] [(< (length L) n ) L] [else (cons (first L) (my-take (rest L) (- n 1)))]))
  8. • (check-equal? (my-take `(11 22 33 44) 2) `(11 22))

    • (check-equal? (my-take `(`a `b `c `d) 2) `(`a `b)) • (check-equal? (my-take `(`a `b `c `d) 100) `(`a `b `c `d)) • (check-equal? (my-take `() 21) `())
  9. 関連トピック • AST(abtact sysntax tree) • S-expression(sエクスプレッション ) • scope(

    スコ ー プ ) • Box type(mutable 可 ) • Higher order fucntion( 高級関数 ) • Clousure( クロ ー ジャ ) • Function as a value( 関数としての値 ) • binding( バインディング )