Tuesday, February 07, 2006

scheme newbies code

ใน Programming musings
เขาลงเรื่อง scheme code kata
ตั้งปัญหาว่า
ถ้ามี input นี้
(a 1 2 3 b 4 5 c d 8 9 e)
แล้วต้องการ convert ให้เป็นแบบนี้
((a (1 2 3)) (b (4 5)) (c ()) (d (8 9)) (e ()))
จะเขียนอย่างไงดี

ในฐานะ newbie อย่างเรา
ก็อดลองไม่ได้
ผลลัพท์ที่ run ผ่านครั้งแรก

(define (group ls)
(if (empty? ls)
'()
(let ((fst (first ls))
(rst (rest ls)))
(if (symbol? fst)
(cons (cons fst (list (scan-num rst))) (group rst))
(group rst)))))


(define (scan-num ls)
(if (empty? ls)
'()
(if (not (symbol? (first ls)))
(cons (first ls) (scan-num (rest ls)))
'())))

ได้คำตอบ แต่มี loop ที่ทำซ้ำ โดยไม่ได้ประโยชน์อะไรฝังอยู่ด้วย

ถ้ารู้ว่า พวกเก่งๆ เขาเขียนอย่างไร ก็ลองดูที่นี่
Link

Note: idea ของผม จะคล้ายๆของคนนี้ my_pengy
แต่ผมยังจัดความคิดได้ไม่เป็นระเบียบเท่าเขา

Related link from Roti

No comments: