Saya memulai kursus ilmu komputer sarjana musim gugur mendatang, tetapi saya tidak dapat benar-benar memahami kalkulus dalam konteks pemrograman fungsional. Saya mungkin salah menafsirkan ini sepenuhnya, tetapi berdasarkan definisi ini dari Stanford Encyclopedia of Philosophy, itu hanyalah notasi lain untuk fungsi.
Jika adalah hanya itu, mengapa menguntungkan untuk menggunakan λ-kalkulus lebih notasi fungsi biasa untuk menghitung algoritma run time?
Jawaban:
Dalam ilmu komputer kami ingin menganalisis dan memahami kode sumber dengan ketelitian matematis. Itulah satu-satunya cara untuk membuktikan sifat menarik (seperti pemutusan hubungan kerja) dengan kepastian absolut. Untuk itu kita membutuhkan bahasa dengan makna yang sangat jelas untuk setiap konstruk.
Secara teori ini bisa berupa bahasa apa saja dengan semantik formal yang bagus . Tetapi untuk membuat hal-hal menjadi lebih mudah dan tidak rentan terhadap kesalahan, yang terbaik adalah menggunakan bahasa yang sesederhana mungkin tetapi masih dapat mengekspresikan program apa pun (yaitu Turing selesai ). Untuk alasan tentang kode imperatif, ada mesin Turing . Tetapi untuk alasan tentang pemrograman fungsional, ada -calculus.λ
Dasar -calculus seperti bahasa pemrograman fungsional, tetapi dengan banyak 'bagasi' diambil. Ini tidak penting bahwa ini menjadi bahasa yang baik untuk benar-benar menulis program, juga bukan bahasa yang efisien. Hanya saja itu sederhana dan ekspresif. Sebagai contoh, kita tidak memerlukan loop, karena kita dapat mensimulasikannya dengan rekursi. Dan kita tidak memerlukan fungsi dengan banyak parameter, karena kita dapat mensimulasikannya dengan Currying .λ
Sekarang, pada titik tertentu Anda mungkin ingin membuktikan properti tentang konstruksi yang bukan bagian dari dasar (tidak diketik) -calculus. Itu sebabnya para ilmuwan komputer telah memperluasnya ke berbagai arah selama bertahun-tahun. Sebagai contoh, untuk alasan tentang sistem tipe ada banyak sekali variasi dari typed -calculi .λλ λ
sumber
anehnya banyak buku berbicara tentang kalkulus tanpa menyebutkan Lisp atau Skema , bahasa pemrograman modern berdasarkan itu, meninggalkan siswa sayangnya dengan gagasan yang lama dan abstrak dan sebagian besar teoretis. mempelajari Lisp atau Skema bisa menjadi cara yang bagus untuk sangat membantu memahami calculus.λλ λ
ada banyak keuntungan menggunakan Lisp atau pemrograman fungsional dan menghitung run time algoritma hanya satu kemungkinan (walaupun akan sangat membantu jika Anda mengutip referensi untuk itu). karena ini sudah dalam notasi fungsional kadang-kadang menentukan rumus untuk run time melalui hubungan induksi atau perulangan mungkin memiliki hubungan yang lebih kuat atau lebih jelas dengan kode asli. jenis analisis algoritma lainnya juga disederhanakan.
Keuntungan utama lainnya adalah kesederhanaan sintaksis. parser untuk bahasa lain sangat kompleks tetapi parser Lisp sangat sederhana. jadi Lisp adalah bahasa yang bagus untuk mempelajari teori parsing.
aspek kunci lain menganalisis perangkat lunak yang lebih dari logika atau matematika lensa / view daripada perspektif "komputer ilmiah".
sebagai jawaban lain menunjukkan, Lisp adalah tentang rekursi, bukan iterasi dan rekursi sangat banyak di jantung CS.
lebih banyak advokasi untuk " view" dan detail dapat ditemukan di [1], ref online dan semi-terkenal gratis.λ
[1] Struktur & Interpretasi program komputer, oleh Abelson & Sussman
sumber