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

3つの言語 3つの世界

soukouki
July 02, 2021
68

3つの言語 3つの世界

A-pxlのLT会で発表したスライドです.
Ruby, Scheme, Elmについての簡単な紹介です.

C, C#のような言語を主に触ってきた方を対象にしています.

soukouki

July 02, 2021
Tweet

Transcript

  1. コードを読んでみよう! def fizzbuzz(n) (1..n).each do |i| if i%15 == 0

    puts "FizzBuzz" elsif i%3 == 0 puts "Fizz" elsif i%5 == 0 puts "Buzz" end end end fizzbuzz(15)
  2. 実際、C言語では頑張ってコードを書かないといけません。 #include<stdio.h> int main() { int input[100], odd[100], even[100]; int

    input_max=0, odd_max=0, even_max=0; for(int i=0; i<100; i++) { int n; scanf("%d", &n); if(n==0){ break; } input[input_max] = n; input_max++; if(n%2 == 0) { even[even_max] = n; even_max++; } else { odd[odd_max] = n; odd_max++; } } printf("Input:"); for(int i=0; i < input_max; i++) { printf("%3d", input[i]); } printf("\nOdd: "); for(int i=0; i < odd_max; i++) { printf("%3d", odd[i]); } printf("\nEven: "); for(int i=0; i < even_max; i++) { printf("%3d", even[i]); } printf("\n"); }
  3. arr = gets.split.map(&:to_i) puts "Input: "+arr.join(" ") puts "Odd: "+arr.select(&:odd?).join("

    ") puts "Even: "+arr.select(&:even?).join(" ") 短い!サイコー!高階関数サイコーーー!!
  4. LISP ∋ Scheme LISPは、なんと1958年に初めて設計さたもので、今も広範囲に使用されている高水準 プログラミング言語の中ではFORTRANに次いで2番目に古いのです! 名前の由来はlist processorで、独特な構文を持つのが特徴です。 Scheme ∈ LISP

    Schemeは1975年に登場した、LISPの方言です。2013年に最新のバージョンが発表され ています。 名前の由来はSchemer(陰謀を企てる者)で、Schemeの前にもPlanner(計画する者)や Conniver(策略を巡らす者)などといった言語がありました。 (君たち物騒すぎない?)
  5. コードを読んでみよう! (define (fizzbuzz n) (define (fizzbuzz-i li n) (if (>=

    n 1) (fizzbuzz-i (cons (fizzbuzz-ii n) li) (- n 1)) li)) (define (fizzbuzz-ii n) (cond ((= (modulo n 15) 0) "FizzBuzz") ((= (modulo n 3) 0) "Fizz") ((= (modulo n 5) 0) "Buzz") (else (number->string n)))) (fizzbuzz-i '() n)) (display (string-join (fizzbuzz 15) "\n" 'suffix)) なに・・・これ・・・?
  6. fizzbuzz : Int -> String fizzbuzz n = String.join "

    " <| List.map fizzbuzzI <| List.range 1 n fizzbuzzI : Int -> String fizzbuzzI n = case (Basics.modBy 3 n == 0, Basics.modBy 5 n == 0) of (True, True) -> "FizzBuzz" (True, False) -> "Fizz" (False, True) -> "Buzz" (False, False) -> String.fromInt n