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

racket言語解説

Avatar for yuyays yuyays
July 23, 2025
83

 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( バインディング )