Semi-nghiêm túc, nếu bạn muốn Nhược điểm, CAR và CDR trong Ruby, bạn có thể làm tồi tệ hơn
def cons(x,y)
return lambda {|m| m.call(x,y)}
end
def car(z)
z.call(lambda {|p,q| p})
end
def cdr(z)
z.call(lambda {|p,q| q})
end
Và sau đó bạn có thể định nghĩa thủ tục danh sách của bạn,
def interval(low, high)
if (low > high)
return nil
else
return cons(low, interval(low + 1, high))
end
end
def map(f, l)
if (l == nil)
return nil
else
cons(f.call(car(l)), map(f, cdr(l)))
end
end
def filter(p, l)
if (l == nil)
return nil
elsif (p.call(car(l)))
return cons(car(l), filter(p, cdr(l)))
else
return filter(p, cdr(l))
end
end
def reduce(f, f0, l)
if (l == nil)
return f0
else
return f.call(car(l), reduce(f, f0, cdr(l)))
end
end
Và sau đó bạn có thể nhận được tổng các vuông lẻ uares trong phạm vi từ 1 đến 10:
reduce(lambda {|x, y| x + y},
0,
filter(lambda {|x| x % 2 == 1},
map(lambda {|x| x * x},
interval(1, 10))))
=> 165
Nguồn
2009-10-06 04:18:42
Không chỉ không hữu ích, nó không thực sự có ý nghĩa. Ô tô, cdr và khuyết điểm thực chất được liên kết với các tế bào khuyết điểm. Vì các ô khuyết điểm không liên quan đến mảng Ruby, nên mọi phương thức như vậy sẽ là một từ sai. – Chuck