Skip to content

Instantly share code, notes, and snippets.

View yanfeng42's full-sized avatar
💌
I may be slow to respond.

Macro yanfeng42

💌
I may be slow to respond.
View GitHub Profile
@yanfeng42
yanfeng42 / iterative-improve.scm
Last active August 3, 2021 02:04
1.46 迭代式改进的一般 形式.
; 迭代式改进. -- 哈哈哈. 最终的社区精简版, 竟然是我这种写法. --- 编程理念的差异. 在可读性和技巧性的取舍上, 我优先选择 可读性.
(define (iterative-improve good-enough? impove)
(define (f x)
(if (good-enough? x)
x
(f (impove x))
)
)
f
)
@yanfeng42
yanfeng42 / midpointSegment.swift
Created August 11, 2021 04:13
2.2 的 swift 版实现 -- 先用swift 模拟 cons car cdr
// mirror...
func cons<T0, T1>(_ x: T0, _ y: T1) -> (T0, T1) {
return (x, y)
}
func car<T0, T1>(_ t:(T0, T1)) -> T0 {
return t.0
}
func cdr<T0, T1>(_ t:(T0, T1)) -> T1 {
@yanfeng42
yanfeng42 / my-cons.scm
Created August 19, 2021 06:54
2.1.3 有感: 在支持函数作为第一对象的语言里, 可以直接 使用 “过程” 定义 “数据”
(define (my-cons x y)
(lambda (m)
(cond ((= m 0) x)
((= m 1) y)))
)
(define (my-car z) (z 0))
(define (my-cdr z) (z 1))
@yanfeng42
yanfeng42 / church.scm
Created August 26, 2021 04:41
2.6 Church计数: 不使用数字的计算法
(define zero (lambda (f) (lambda (x) x)))
(define one (lambda (f) (lambda (x) (f x))))
(define two (lambda (f) (lambda (x) (f (f x)))))
(define three (lambda (f) (lambda (x) (f (f (f x))))))
(define (add m n)
(lambda (f) (lambda (x) ((m f) ((n f) x))))
@yanfeng42
yanfeng42 / BinarySearchCase.java
Created August 27, 2021 02:44
1.1.39 关于随机数碰撞的警示
package life.yanfeng.study.algorithm;
import edu.princeton.cs.algs4.In;
import edu.princeton.cs.algs4.StdOut;
import java.util.Arrays;
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;
// for 1.1.39
@yanfeng42
yanfeng42 / mul-interval-2.scm
Last active August 30, 2021 05:45
sicp 2.11 没有完全符合要求的答案
; (define (mul-interval x y)
; (let ((p1 (* (lower-bound x) (lower-bound y)))
; (p2 (* (lower-bound x) (upper-bound y)))
; (p3 (* (upper-bound x) (lower-bound y)))
; (p4 (* (upper-bound x) (upper-bound y)))
; )
; (make-interval (min p1 p2 p3 p4) (max p1 p2 p3 p4))
; )
; )
@yanfeng42
yanfeng42 / view_money_order.scm
Last active September 10, 2021 12:41
sicp 2.19: 可视化的方式, 展示零钱本身的顺序, 对计算过程的不同影响.
; 源码 1.14.scm 中有一部分.
; 既有实现的输出: 4.
(count-change 10)
; 新的实现...
(define us-coins (list 50 25 10 5 1))
(define us-coins-0 (list 1 5 10 25 50))
(define us-coins-1 (list 50 5 10 1 25))
(define uk-coins (list 100 50 20 10 5 2 1 0.5))
@yanfeng42
yanfeng42 / SmartDate.java
Created September 29, 2021 02:02
SmartDate 有感: 我支持 所有异常 都是 受检异常
package life.yanfeng.study.algorithm;
import edu.princeton.cs.algs4.StdOut;
public class SmartDate {
private final int month;
private final int day;
private final int year;
public SmartDate(int m, int d, int y) throws RuntimeException
{
@yanfeng42
yanfeng42 / same-parity.scm
Created September 30, 2021 09:25
same-parity: 不借助 辅助函数的 特殊 “超纲” 写法
; 基础方法
(define (same-parity x . l)
(same-parity-adpater x l)
)
(define (same-parity-adpater x l)
(if (null? l)
(cons x l)
(let ((car-item (car l)))
(if (even? (+ car-item x))
@yanfeng42
yanfeng42 / SmartDate.java
Created October 15, 2021 02:16
algs4: 1.2.12 使用 蔡勒公式 计算今天星期几
package life.yanfeng.study.algorithm;
import edu.princeton.cs.algs4.StdOut;
public class SmartDate {
private final int month;
private final int day;
private final int year;
public SmartDate(int m, int d, int y) throws RuntimeException
{