Saya ingin memahami bagaimana spreadsheet (sekelompok sel yang dinamai atau diidentifikasi mengandung nilai atau rumus yang merujuk sel lain) diselesaikan. Saya telah mencoba melihat proyek yang ada, tetapi ada banyak hal yang terjadi dengan GUI, serialisasi, peristiwa, dll. Saya tidak dapat menemukan spreadsheet.
Paling sederhana bagaimana cara kerjanya?
design
algorithms
Hildred
sumber
sumber
Jawaban:
Pada intinya, spreadsheet adalah bahasa fungsional dengan pengetikan dinamis dan setiap fungsi atau nilai dapat direferensikan sebagai sel dalam matriks.
Alih-alih hal-hal seperti
(defn some-name ...)
itusome-name
bagian ditempatkan dalam sel itu sendiri.Jika Anda pergi ke ide bahasa fungsional yang diperbarui secara dinamis (seperti lighttable untuk clojure), Anda akan melihat banyak fungsi yang sama dengan spreadsheet. Bind nilai ke nama, tulis fungsi yang menggunakan nilai itu, ubah nilainya dan output fungsi segera berubah. Ini sama dengan melakukan sesuatu seperti menulis
=A1 + B2
di lokasiC3
di excel.Dengan demikian, programmer fungsional sering suka menulis spreadsheet sebagai program mainan ... dan subjek makalah penelitian juga. (Ya, saya minta maaf, mereka semua berada di belakang paywall ACM.org)
Pemrograman fungsional spreadsheet
Bentuk / 3: Bahasa visual orde pertama untuk menjelajahi batas-batas paradigma spreadsheet
Menerapkan spreadsheet fungsi
Awal Spreadsheet di Wikipedia memberikan beberapa petunjuk bagaimana menerapkannya:
Membangun ini dari Garis Besar paradigma Model-View-Controller seperti yang diungkapkan dalam perpustakaan Java . Penulis kemudian menyebutkan applet (sedikit tanggal, itu ditulis dalam '93 -'96) dan menyebutkan halaman webnya yang menuju ke http://csis.pace.edu/~bergin/Java/applets.htm (ya , applet) untuk kode spreadsheet yang sesuai http://csis.pace.edu/~bergin/Java/Spreadsheet.java
Saya akan tunjukkan bahwa keseluruhan spreadsheet, tidak sebesar di applet 570 baris ini termasuk dokumentasi.
Yang mengatakan, tergantung pada bahasanya, Anda mungkin bisa melakukan semuanya hanya dengan pointer fungsi dalam array yang jarang.
sumber
Secara konseptual, setiap sel adalah simpul dari grafik asiklik terarah , dan referensi ke sel lain membuat tepian dalam grafik itu. Saat Anda mengubah sel, pengurutan topologi dari semua node yang dapat dijangkau dari sel yang Anda ubah akan memberi Anda urutan yang Anda butuhkan untuk mengevaluasi sel. Setelah Anda menentukan urutan yang benar, itu hanya penguraian ekspresi standar.
sumber
Seperti yang telah disebutkan, spreadsheet mudah diimplementasikan sebagai DAG (grafik asiklik terarah) yang disimpan dalam hash atau kamus sederhana. Beberapa kode sederhana untuk dimainkan mungkin merupakan cara termudah untuk memahaminya:
Versi Python yang sangat sederhana: http://code.activestate.com/recipes/355045-spreadsheet/
Ini dijelaskan dan dijabarkan dalam posting blog ini: http://ralsina.me/weblog/posts/BB585.html
Ada juga versi JavaScript sederhana dengan GUI di sini: http://jsfiddle.net/ondras/hYfN3/
sumber
Saya telah mengkodekan paket python yang memungkinkan Anda untuk mengkonversi struktur sel fungsi file tujuan MS Excel menjadi Python. XL2py
Nilai sel diuraikan ke objek tipe dict () menambahkan nilainya. Sel dengan referensi ke sel lain dengan rumus terdiri dari node. Node merujuk pada sel yang nilainya ditentukan oleh rumusnya. Dari setiap rumus simpul, struktur dependensi didefinisikan untuk menentukan apakah referensi melingkar ada atau tidak. Pesanan perhitungan node didefinisikan dengan memperhitungkan struktur ketergantungan sel yang terlibat.
Pada struktur pohon I / O, Anda dapat menggunakan algoritma minimisasi apa pun yang diterapkan di Python sesuai keinginan Anda.
Saya sarankan Anda melihat di https://github.com/gusmaogabriels/XL2py
Salam, Gabriel
sumber