Sắp xếp một câu hỏi rộng, nhưng rất hay, tôi thích nó.
Để hỗ trợ ví dụ của tôi, trong câu trả lời này tôi sẽ triển khai & hellip;
abuild :: Number -> (Number -> a) -> [a]
& hellip; như kiểu gợi ý, lấy một số và một hàm để xây dựng một mảng. Điều này có thể hữu ích nếu bạn muốn xây dựng một mảng có kích thước đã biết dựa trên một số tính toán.
Hãy tạo một mảng có 5 phần tử sử dụng chức năng nhận dạng, id
.Như bạn có thể thấy, một chỉ số số tuần tự bắt đầu với 0 được trao cho builder bạn chức năng
abuild (5) (id) // => [0,1,2,3,4]
Hãy làm điều gì đó toán học với người xây dựng lần này. Chúng tôi sẽ tạo hình vuông cho đầu vào. Rất tiên tiến.
abuild (5) (x=> x * x)
// => [0,1,4,9,16]
Hoặc có thể chúng tôi không quan tâm đến đầu vào. Tôi luôn thích một tiếng cười tốt. Tôi luôn cười liên tục. Người ta có thể nói tôi K('ha')
& hellip;
abuild (5) (K('ha'))
// => ['ha','ha','ha','ha','ha']
Boom! Khá hữu ích, phải không? Đó là K
Thực hiện
Đi trước và chạy nó để xem K
trong hành động!
// id :: a -> a
const id = x=> x
// K :: a -> b -> a
const K = x=> y=> x
// add :: Number -> Number -> Number
const add = x=> y=> y + x
// reduce :: (a -> b) -> b -> [a] -> b
const reduce = f=> y=> ([x,...xs])=> {
if (x === undefined)
return y
else
return reduce (f) (f (y) (x)) (xs)
}
// map :: (a -> b) -> [a] -> [b]
const map = f=> reduce (xs=> x=> [...xs, f(x)]) ([])
// iterate :: Number -> (a -> a) -> a -> [a]
const iterate = n=> f=> x=>
n > 0 ? [x, ...iterate (n - 1) (f) (f(x))] : []
// abuild :: Number -> (Number -> a) -> [a]
const abuild = n=> f=>
map (f) (iterate (n) (add (1)) (0))
console.log(abuild (5) (id))
// => [0,1,2,3,4]
console.log(abuild (5) (x=> x * x))
// => [0,1,4,9,16]
console.log(abuild (5) (K('ha')))
// => ['ha','ha','ha','ha','ha']
http://cs.stackexchange.com/questions/55441/what-is-the-purpose-of-the-ski-combinator-calculusor-even-lambda-calculus- wha –
Có vẻ như hàm CL [constanty] (http://clhs.lisp.se/Body/f_cons_1.htm) đôi khi khá hữu ích. – Sylwester
Trong ngôn ngữ được sử dụng, bạn sẽ sử dụng nó bất cứ khi nào bạn muốn gọi lại để bỏ qua đối số đầu tiên. – Bergi