저는 Lisp (코드는 GitHub입니다)을 쓰고 있는데 로컬 바인딩을 구현하고 싶습니다. 한 번에 여러 개의 값을 결합하는 하나의 변수 또는 기능을 결합 용동시 바인딩 구현하기
(let <var> <val> <expr>)
및
(with (<var1> <val1> ... <varN> <valN>) <expr>)
: 현재 I 두 구문을 갖는다.
현재 바인딩은 순차적으로 평가되며 각 새 함수 바인딩은 정의 된 환경의 복사본을 유지하므로 은 <var1>
을 참조 할 수 있지만 그 반대는 마찬가지입니다.
한 번에 여러 값을 바인딩 할 때 효과적으로 동시 바인딩을 가질 수 있도록 코드를 수정하고 싶습니다. 예를 들어, 내가 쓸 수 있도록하고 싶습니다 (이것은 사소한 예이지만, 아이디어를 설명한다) : 순간
(define (h y)
(with ((f x) (if (eq? x 0) #t (g (- x 1)))
(g x) (if (eq? x 0) #f (f (- x 1))))
(f y))
이 코드가 실행되지 않습니다 - g
는 f
이상 닫지 만하지 다른 방향으로.
Lisp에서 동시 바인딩을 구현할 수있는 표준 방법이 있습니까?
변수 바인딩 구조체로'with'를 소개하지만, 다음 예제에서는 int가 어휘 함수 바인딩 구조로 변합니다. 그게 사실인가요? 심볼 또는리스트가되는 ''을 구별합니까? –
Kaz
댓글을 주셔서 감사합니다. 그래, 내 구현에서'let'과'with'는 두 변수 (''이 기호 인 경우)와 렉시 컬 함수 (' '가 목록 인 경우)를 바인딩합니다.그들은 정확히 동일한 기본 함수를 호출합니다 - 내 github repo에서 EvalApply.hs의 114-139 행을 참조하십시오. –