정말 재미있는 우연의 일치! 나는 월요일부터 존재하는이 특성을 가진 하나의 언어를 알고있을 것입니다. 여기에 : https://github.com/drcz/ZJEB
이것은 부분적으로 농담이고 부분적으로는 표현력이 있어야합니다. 여기 예와 REPL 세션입니다 :
(-- ALGORITHMIC LANGUAGE ZJEB v0.1 --)
copyleft 2016/08/08 by Scislav Dercz
type (halt) to quit
READY.
>(def func1 (bind (x) (* x x)))
(new shorthand func1 memoized)
>(def func2 (bind (x) (+ x 1)))
(new shorthand func2 memoized)
>(def a 1)
(new shorthand a memoized)
>(def b (func1 a))
(new shorthand b memoized)
>(def c (func2 b))
(new shorthand c memoized)
>c
2
>b
1
>(def a 2)
(new shorthand a memoized)
>c
5
>b
4
는 여기에 간단한 하나
>(def x 5)
(new shorthand x memoized)
>(def y (* x x))
(new shorthand y memoized)
>y
25
>(def x 3)
(new shorthand x memoized)
>y
9
것은이 제도는 달리, 인 (또는 내가 아는 다른 혀짤배기)는이 "DEF"형태는 않습니다 두 번째 피연산자를 평가하지 않습니다 - 주어진 표현식에 대한 구문 상 "속기 (shorthand)"를 만듭니다. 따라서 평가자가 심볼을 발견 할 때마다, 환경에서 그것을 찾는다. (즉, "bind"형식으로 만들어진 가변 값 바인딩 - lisp의 "lambda"형식의 다중 케이스 패턴 일치 변형) , 실패하면 정의 목록도 검사합니다. 성공하면 즉시 대응하는 표현식을 평가합니다.
언어가 순전히 기능적이기 때문에 설명하는 것을하기위한 것이 아니며 일반적으로 유용하지는 않습니다. 현재 구현에서 평가자에게 조금 더 많은 작업을 수행하도록 강요합니다. 속기를 다시 정의하는 유일한 이유는 repl로 작업하는 편의를위한 것입니다. 실제로 무한한 표현 다나 스콧의 "흐름 다이어그램의 격자"의 정신에
(bind (0) 1
(n) (* n ((bind (0) 1
(n) (* n ...)) (- n 1)))
을 의미하는
(def fact (bind (0) 1
(n) (* n (fact (- n 1)))))
같은 재귀 적 정의에 대해 생각하고 싶었 기 때문에이 "기능"에있다. 당신이 그들을 평가하려고 할 때 아마뿐만 아니라 [부분적으로-게으른 평가 또는 무언가에 의해] 그들이 합법적해야하지만 무한 데이터 구조
(def evil `(ha ,evil))
같은 인터프리터를 중단 할
주 ..
질문으로 돌아가서, 적어도 특정 데이터 유형에 대해 요구되는 행동을 제공하는 다양한 Functional Reactive Programming 언어/프레임 워크를 살펴보십시오.
Svik의 의견도 매우 훌륭합니다. 스프레드 시트 수식은 이런 식으로 작동합니다 (일부 사람들은 FRP 언어라고 주장합니다).
(게으른 평가 대상은 내가 알지 못하는 "게으른"언어의 변수 범위가 어휘 적이기 때문에 - 게으름 + 동적 범위 지정은 위의 mcoblenz처럼 너무 혼란 스러울 수 있습니다.)
하스켈 ('순수한'기능 언어 중 하나 인)과 같은 기능 언어를 살펴볼 수 있습니다. – DAXaholic
지연 평가? https://en.wikipedia.org/wiki/Lazy_evaluation – Wickramaranga
엑셀 스프레드 시트는 이런 종류의 작업을합니다. – svick