scheme十戒五律
0.1 scheme十戒
0.2 scheme五律
五法 | 内容 |
---|---|
car之法则 | 基本元件car仅定义为针对非空列表(获取第一个元素) |
cdr之法则 | 基本元件cdr仅定义为针对非空列表,任意非空列表的cdr总是另一个列表 |
cons之法则 | 基本原件cons需要两个参数, 第二个参数必须是一个列表, 结果是一个列表 |
null? 之法则 | 基本元件null?进定义为针对列表 |
eq?之法则 | 基本元件eq?需要两个参数, 每个参数都必须是一个非数字的原子 |
Ch1 玩具总动员
名词解释:
- atom: 原子
- list: 列表
- collection: 集合
- S表达式: scheme中所以元素都可以叫做S表达式。
1.1 本章基本函数
1.1.1 car函数
def car(lst: List) -> Any:
"""Returns the first item in lst"""
assert isinstance(lst, list), "must provide a list!"
try:
# 尝试获取第一个元素
return lst[0]
except IndexError:
# 如果列表是空的,抛出IndexError
raise IndexError(f"func-car: The provided {lst} is empty")
1.1.2 cdr函数
def cdr(lst: List) -> List:
"""Returns all items in lst after the first one"""
assert isinstance(lst, list), "must provide a list!"
try:
# 跳过第一个元素
return lst[1:]
except IndexError:
# 如果列表元素不足,抛出IndexError
raise IndexError(f"func-cdr: The provided {lst} has insufficient elements")
1.1.3 cons函数
def cons(item: Any, lst: List) -> List:
"""Returns a new list with car_item as the first element followed by elements of lst"""
assert isinstance(lst, list), "must provide a list!"
try:
# 创建新列表,包含 car_item 和 lst 的元素
return [item] + lst
except TypeError:
# 如果传入的对象不是列表,抛出TypeError
raise TypeError(f"func-cons: The provided object {lst} is not a list")
1.1.4 is_null函数
def is_null(lst: List) -> bool:
"""Returns True if lst is empty, False otherwise"""
assert isinstance(lst, list), "must provide a list!"
return not lst
1.1.5 is_atom函数
def is_atom(s: Any) -> bool:
"""Returns True if obj is an 'atomic' type (int, float, str, bool), False otherwise"""
return isinstance(s, (Number, str, bool))
1.1.6 eq函数
def eq(a: Any, b: Any) -> bool:
"""Returns True if a is equal to b, False otherwise"""
assert isinstance(a, (str, bool)), "must provide a no Number atom!"
assert isinstance(b, (str, bool)), "must provide a no Number atom!"
return a == b
1.2 本章内容注意
注意点:
(car l)
是获取l的第一个元素, 两端的括号只是代表这是一个过程了- 当
(cdr l)
只返回一个元素时, 要在外面加上一层列表哦
Ch2 处理, 处理, 反复处理
2.1 本章基本函数
2.1.1 cond函数
2.1.2 lat函数
def lat(lst: List) -> bool:
"""返回列表是否全部由原子组成"""
assert isinstance(lst, list), "must provide a list!"
if is_null(lst): return True
if not is_atom(car(lst)): return False
return lat(cdr(lst))