๐Ÿ”™ Back to Top

Sat Jul 6 23:11:34 JST 2013

/scheme/amb-final.scm.txt

ๆ˜จๆ—ฅใใ‚‰ใ„ๆ›ธใ„ใŸ๏ผŽใฉใ‚“ใช็Šถๆ…‹ใงใ‚‚ใกใ‚ƒใ‚“ใจๅ‹•ใ่‡ชไฟกใŒใชใ„

ใใ‚Œใฏใจใ‚‚ใ‹ใ

Haskellใงใ‚ˆใใ‚ใ‚‹

case list of
 []   -> a 
 x:xs -> f x xs

ใ“ใ†ใ„ใ†ใƒชใ‚นใƒˆใฎใƒ‘ใ‚ฟใƒผใƒณใƒžใƒƒใƒ. ใ‚‚ใกใ‚ใ‚“ๅฎŸ้š›ใซใฏๆ›ดใซ่ค‡้›‘ใชใƒ‘ใ‚ฟใƒผใƒณใƒžใƒƒใƒใ‚‚ใ‚ใ‚‹ใ‘ใฉใ€ ใŸใ„ใฆใ„ใฏใ“ใฎ[]ใ‹ใฉใ†ใ‹ใ ใ‘ใฎไบŒ้€šใ‚Šใซๅˆ†ๅฒใ•ใ›ใ‚‹ใ ใ‘ใงๆธˆใ‚€

ใƒ‘ใ‚ฟใƒผใƒณใƒžใƒƒใƒใฎ็„กใ„่จ€่ชžใง็›ธๅฝ“ใฎใ“ใจใ‚’ใ•ใ›ใ‚‹ใซใฏ if ใ‚’ ๆ›ธใใฎใงใ‚ใฃใฆใ€if ใฏๆ™ฎ้€šใ€้…ๅปถ่ฉ•ไพกใซใชใ‚‹ใฎใ ใ‘ใฉใ€ ไธŠใฎใ‚ณใƒผใƒ‰ใงใ„ใ† a ใŒๅฐ‘ใชใใจใ‚‚ใใฎๆ–‡่„ˆใงๅฎšๆ•ฐใงใ€(x:xs)ใฎ ใƒ‘ใ‚ฟใƒผใƒณใฎๆ™‚ใฏ(x,xs)ใ‚’ๅ—ใ‘ๅ–ใ‚‹ใƒฉใƒ ใƒ€ๅผใจใ™ใ‚Œใฐใ€ใ“ใ‚Œใฏ ifใงใชใใฆใ‚‚ใ„ใ„ใ“ใจใซใชใ‚‹๏ผŽ

function match(ls, u, f) {
  return ls.length==0 ? u : f(ls[0], ls.slice(1));
}

ๆ•ขใˆใฆๅ†็™บๆ˜Žใ™ใ‚‹ๅฟ…่ฆใ‚‚ใชใ„ length, filter ใ‚’ๆ›ธใ„ใฆใฟใ‚‹ใจไปฅไธ‹ใฎใ‚ˆใ†ใซ

function len(ls) {
  return match(ls, 0, function(x,xs){ return 1+len(xs) });
}
console.log(len([1,2,3]))

function cons(x,xs) {
  return [x].concat(xs);
}
function filter(ls, pred) {
  return match(ls,[]
    , function(x,xs){
        var ys = filter(xs,pred);
        return pred(x) ? cons(x, ys) : ys;
    });
}
function oddp(x) { return x%2 != 0 }
console.log(filter([1,2,3,4,5], oddp))

Array#slice ใฃใฆใฉใฎใใ‚‰ใ„ใ‚ณใ‚นใƒˆๆŽ›ใ‹ใ‚‹ใ‚“ใ ใ‚ใ†ใ‹