Saya baru-baru ini refactoring potongan besar kode dan menggantinya dengan permintaan Linq.
Menghapus bias bahasa - Linq pada dasarnya adalah seperangkat Map / Filter dan Mengurangi operasi yang beroperasi pada urutan data.
Ini membuat saya berpikir, sejauh mana saya secara teoritis dapat mengambil ini. Apakah saya dapat menulis ulang seluruh basis kode menjadi serangkaian (atau bahkan satu) dari Map / Filter dan Mengurangi operasi.
Sayangnya saya dibayar untuk melakukan hal-hal yang berguna, jadi saya belum bisa bereksperimen lebih jauh, tetapi saya tidak bisa memikirkan struktur kode apa pun yang tidak dapat disusun ulang seperti itu. Kode efek samping dapat ditangani melalui monads .. Bahkan keluaran pada dasarnya memetakan alamat memori ke alamat layar.
Apakah ada sesuatu yang tidak bisa (secara teoritis) ditulis ulang sebagai permintaan Linq?
sumber
my_list.map(_ignored => a copy of my_list)
, sepertinya ruang penggunaan program seperti itu dibatasi oleh beberapa polinomial (tergantung pada panjang program). Maka bahasa seperti itu tentu tidak bisa menghitung masalah yang tidak ada di PSPACE. Namun, karena banyak masalah dalam PSPACE dianggap tidak dapat ditangani, untuk mengatakan tidak ada kelas yang lebih besar, ini mungkin bukan pembatasan yang sangat serius.Jawaban:
Ini disebut pemrograman fungsional, dan dianggap oleh banyak orang sebagai konsep dasar. inilah intro yang bagus tentang Joel On Software . Jawaban yang lebih teknis ada, tidak ada cara yang dikenal saat mengajukan pertanyaan komputer Anda (dengan cara yang didefinisikan dengan baik) yang tidak bisa dijawab melalui SKI kalkulus.
sumber
map
,filter
danreduce
(ini berjalan tiga kali jika kita mengabaikan kelengkapan turing dan menggunakan bahasa FP praktis). Bahkan, mereka kebetulan agak umum dan dengan demikian umumnya bermanfaat, tetapi sebenarnya aplikasi pemrograman fungsional sangat sederhana. Kalkulus lambda minimum dapat mendefinisikan fungsi-fungsi itu di antara banyak fungsi lainnya, bukan sebaliknya.