oper = proc do |op|
proc do |x, y|
x.method(op).call(y)
end
end
add = oper[:+]
add[1,2] # => 3
sub = oper[:-]
sub[2,1] # => 1
นี่ถ้าเป็นเมื่อก่อน ตอนที่ยังไม่เรียน scheme
ก็คง งงงวย พักใหญ่
(การเขียน คง กับ งงงวย ติดกัน อาจทำให้ผู้อ่านเกิด
อาการเมา blog ได้)
แต่หลังจากเรียนรู้ scheme แล้วก็เลยรู้ว่า
มันคือ higher order procedure นี่เอง
• A procedure is said to be “first-order” if
none of its arguments is itself a procedure.
• A procedure is said to be “higher-order” if
one or more of its arguments is a procedure.
ถ้าเขียนใน scheme ก็จะเป็นแบบนี้
(define oper
(lambda (op)
(lambda (x y)
(op x y))))
(define add
(oper +))
(define sub
(oper -))
(add 1 2) ;; => 3
(sub 2 1) ;; => 1
4 comments:
ก็ยังงง ๆ อยู่ครับ ruby ผมเองก็ไม่ค่อยได้เรื่องเท่าไร ขอบคุณมากครับที่่มี ruby ให้อ่านอยู่เรื่อย ๆ ผมจะมาอ่านทุก ๆ วัน ขยันอัพเดทด้วยนะครับ ผม
ยงยุทธ
method(op) กับ : ใน oper[:+]
นี่คือทำให้เราพิมพ์ + กับ - ได้ใช่มั๊ยครับ ?
คือ + กับ - เป็น object ด้วย
ดีที่ คง งงงวย มีฝูงงูอยู่นะ
มา งงงวย ด้วยคน หวังว่าจะเลิกงงเร็วๆนี้ :)
Post a Comment