計算機プログラムの構造と解釈[第2版]
(翔泳社)
ハロルド エイブルソン (著) ジュリー サスマン (著)
ジェラルド・ジェイ サスマン (著)
Harold Abelson (原著) Julie Sussman (原著)
Gerald Jay Sussman (原著) 和田 英一 (翻訳)
開発環境
- OS X Yosemite - Apple (OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- Scheme (プログラミング言語)
- Gauche (処理系)
計算機プログラムの構造と解釈[第2版](ハロルド エイブルソン (著)、ジュリー サスマン (著)、ジェラルド・ジェイ サスマン (著)、Harold Abelson (原著)、Julie Sussman (原著)、Gerald Jay Sussman (原著)、和田 英一 (翻訳)、翔泳社、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の1(手続きによる抽象の構築)、1.2(手続きとその生成するプロセス)、1.2.6(例: 素数性のテスト)、問題 1.27.を解いてみる。
その他参考書籍
- Instructor's Manual to Accompany Structure & Interpretation of Computer Programs
- プログラミングGauche (Kahuaプロジェクト (著), 川合 史朗 (監修), オライリージャパン)
- Scheme手習い
問題 1.27.
コード(BBEdit, Emacs)
sample27.scm
#!/usr/bin/env gosh
;; -*- coding: utf-8 -*-
(define square (lambda (x) (* x x)))
(define even? (lambda (n) (= (remainder n 2) 0)))
(define expmod
(lambda (base exp m)
(cond ((= exp 0) 1)
((even? exp)
(remainder (square (expmod base (/ exp 2) m))
m))
(else
(remainder (* base (expmod base (- exp 1) m))
m)))))
(define (fast-prime? n)
(fermat-all-test n))
(define (fermat-all-test n)
(define try-it
(lambda (a)
(cond ((= a n) #t)
((= (expmod a n n) a)
(try-it (+ a 1)))
(else #f))))
(try-it 1))
(for-each
(lambda (n)
(print n ": " (fast-prime? n)))
(list 561 1105 1729 2465 2821 6601))
入出力結果(Terminal(gosh), REPL(Read, Eval, Print, Loop))
$ ./sample27.scm 561: #t 1105: #t 1729: #t 2465: #t 2821: #t 6601: #t $
0 コメント:
コメントを投稿