스프레드 시트 (다른 셀을 참조하는 값 또는 수식이 포함 된 명명 된 또는 식별 된 셀 그룹)가 어떻게 해결되는지 이해하고 싶습니다. 기존 프로젝트를 보려고 시도했지만 GUI, 직렬화, 이벤트 등으로 인해 스프레드 시트를 찾을 수 없었습니다.
가장 간단한 방법은 무엇입니까?
스프레드 시트 (다른 셀을 참조하는 값 또는 수식이 포함 된 명명 된 또는 식별 된 셀 그룹)가 어떻게 해결되는지 이해하고 싶습니다. 기존 프로젝트를 보려고 시도했지만 GUI, 직렬화, 이벤트 등으로 인해 스프레드 시트를 찾을 수 없었습니다.
가장 간단한 방법은 무엇입니까?
답변:
기본적으로 스프레드 시트는 동적 입력과 각 함수 또는 값을 행렬의 셀로 참조 할 수있는 기능적 언어입니다.
대신 같은 것들의 부분은 셀 자체에 배치됩니다.(defn some-name ...)
some-name
동적으로 업데이트되는 기능적 언어 아이디어 (예 : clojure 용 lighttable)로 이동하면 스프레드 시트와 동일한 기능을 많이 볼 수 있습니다. 값을 이름에 바인딩하고 해당 값을 사용하는 함수를 작성하고 값을 변경하면 함수의 출력이 즉시 변경됩니다. 이것은 엑셀 =A1 + B2
의 위치에 글을 쓰는 것과 같은 일을하는 것과 같습니다 C3
.
따라서 기능 프로그래머는 종종 스프레드 시트를 장난감 프로그램으로 작성하고 연구 논문의 주제를 선호합니다. (예, 죄송합니다. 모두 ACM.org Paywall 뒤에 있습니다.)
함수형 프로그래밍 커뮤니티는 스프레드 시트에 관심을 보였지만 놀랍게도 아무도 Excel과 같은 표준 스프레드 시트를 Haskell과 같은 표준 함수형 프로그래밍 언어로 작동시키는 것을 고려하지 않은 것 같습니다. 이 백서에서는이를 수행 할 수있는 한 가지 방법을 보여줍니다. 우리는 그렇게함으로써 스프레드 시트 프로그래머가 함수형 프로그래밍을 시도 할 수 있기를 바랍니다.
Forms / 3 : 스프레드 시트 패러다임의 경계를 탐색하는 1 차 시각 언어
함수형 프로그래밍을 방해하는 사람들은 종종 함수형 프로그래밍이 대부분의 프로그래머가 이해하고 사용하기에 너무 어렵거나 반 직관적이라고 주장하지만, 그에 대한 증거는 스프레드 시트의 인기를 보면 알 수 있습니다. 함수형 프로그래밍 패러다임의 1 차 부분 집합 인 스프레드 시트 패러다임은 프로그래머와 최종 사용자 모두에게 널리 받아 들여졌습니다. 그러나 대부분의 스프레드 시트 시스템에는 많은 제한이 있습니다. 이 백서에서는 1 차 선언적 평가 모델에서 벗어나지 않고 이러한 제한 사항 중 몇 가지를 제거하는 언어 기능에 대해 설명합니다.
많은 양의 최종 사용자 개발이 스프레드 시트로 수행됩니다. 스프레드 시트 은유는 시각적이고 대화식 실험을 수용하기 때문에 매력적이지만 Peyton Jones, Blackwell 및 Burnett가 관찰 한 것처럼 스프레드 시트 은유는 표현을 명명 된 함수로 변환하는 것과 같은 가장 기본적인 추상화조차 인정하지 않습니다. 따라서 그들은 지정된 입력 및 출력 셀이있는 워크 시트 측면에서 함수를 정의하는 방법을 제안했습니다. 이것을 함수 시트라고 부릅니다.
Wikipedia 의 스프레드 시트 시작 부분에는 스프레드 시트 를 구현하는 방법에 대한 힌트가 있습니다.
스프레드 시트는 테이블 형식의 데이터 구성 및 분석을위한 대화식 컴퓨터 응용 프로그램입니다. 스프레드 시트는 종이 회계 워크 시트의 컴퓨터 시뮬레이션으로 개발되었습니다. 이 프로그램은 배열의 셀로 표현 된 데이터를 행과 열로 구성하여 작동합니다. 배열의 각 셀은 숫자 또는 텍스트 데이터를 포함 할 수있는 모델 뷰 컨트롤러 요소이거나 다른 셀의 내용을 기반으로 값을 자동으로 계산하여 표시하는 수식 결과입니다.
에서이 바탕 자바 라이브러리에 표현 된 Model-View-Controller 패러다임의 개요 . 저자는 애플릿 ('93 -'96에 약간 날짜가 적힌)을 언급하고 http://csis.pace.edu/~bergin/Java/applets.htm (예)으로 가는 그의 웹 페이지를 언급합니다 (예) 해당 스프레드 시트 코드 http://csis.pace.edu/~bergin/Java/Spreadsheet.java에 대한, 애플릿)
나는 스프레드 시트의 전체가 문서를 포함한이 애플릿 570 라인에서 그렇게 크지 않다는 것을 지적 할 것이다.
언어에 따라 희소 배열의 함수 포인터만으로도 모든 작업을 수행 할 수 있습니다.
개념적으로 각 셀은 유향 비순환 그래프 의 노드이며 다른 셀에 대한 참조는 해당 그래프에서 가장자리를 만듭니다. 셀을 변경할 때 변경 한 셀에서 도달 할 수있는 모든 노드 의 토폴로지 정렬 은 셀을 평가하는 데 필요한 순서를 제공합니다. 올바른 순서를 결정하면 표준 표현식 파싱입니다.
이미 언급했듯이 스프레드 시트는 간단한 해시 또는 사전에 저장된 DAG (directed acyclic graph)로 쉽게 구현됩니다. 간단한 코드를 이해하는 것이 가장 쉬운 방법 일 것입니다.
매우 간단한 파이썬 버전 : http://code.activestate.com/recipes/355045-spreadsheet/
이 블로그 게시물에서 설명하고 상세하게 설명했습니다 : http://ralsina.me/weblog/posts/BB585.html
GUI가있는 간단한 JavaScript 버전도 있습니다 : http://jsfiddle.net/ondras/hYfN3/
MS Excel 파일 목적 함수 셀 구조를 Python으로 변환 할 수있는 Python 패키지를 코딩했습니다. XL2py
셀 값은 dict () 유형 오브젝트로 구문 분석되어 해당 값을 추가합니다. 공식에 의해 다른 세포를 언급 한 세포는 노드를 포함한다. 노드는 수식에 의해 값이 정의 된 셀을 나타냅니다. 각 노드 공식에서 순환 참조가 존재하는지 여부를 정의하기 위해 종속성 구조가 정의됩니다. 노드 계산 순서는 관련된 셀 종속성 구조를 고려하여 정의됩니다.
I / O 트리 구조에서, 파이썬에서 원하는대로 최소화 알고리즘 구현을 사용할 수 있습니다.
https://github.com/gusmaogabriels/XL2py를 살펴보십시오.
안부, 가브리엘