평가 될 때 obj
의 복사본을 반환하는 Scheme 식을 반환하는 하나의 인수 - obj
-의 함수를 구현해야합니다.개체 사본을 반환하려면 어떻게해야합니까?
문제 해결 방법에 대한 아이디어가 있으십니까?
평가 될 때 obj
의 복사본을 반환하는 Scheme 식을 반환하는 하나의 인수 - obj
-의 함수를 구현해야합니다.개체 사본을 반환하려면 어떻게해야합니까?
문제 해결 방법에 대한 아이디어가 있으십니까?
나는 당신이 쓰는 의미 같은데요 "함수 EXPR을 돌려 [받아들이] OBJ [과], 평가,하는 제도 식을 돌려 ..."
는 가정이 경우 : 여기서 정말로 필요한 것은 디자인 레시피입니다. 먼저 함수가 받아들이는 것의 예와 그 결과를 적는다. 이렇게하면 자신이하려는 일, 다른 사람과 자신에게하는 일 (아마도 더 중요한 일)을 분명히 할 수 있습니다.
희망이 있습니다. 당신이 당신의 절차는 모든 개체를 복제 할 수있게하려면
는 다음 개체가 가 다른 종류의 존재의 미덕에 의해 제도의 basic types. 중 하나가 될 수 ... 너무 불투명 죄송합니다, 그들은 각기 다른 "본성이 "또는 구조, 또는 무엇을 가지고, 그래서 한 종류의 객체의 사본을 만드는 것은 반드시 다른 유형의 다른 객체의 사본을 만드는 것과는 다른 전략을 수반하게 될 것입니다.
이렇게 접근하는 방법은 각 Scheme의 유형 (또는 처리하려는 Scheme 유형의 하위 집합)을 검사하고 해당 유형의 객체를 복제하는 것이 무엇을 의미하는지 알아내는 것입니다. 분명한 방법으로 이렇게하면 COPY-NUMBER, COPY-SYMBOL 등과 같은 일련의 특수화 된 절차로 끝나야합니다 (스포일러 : 이러한 많은 절차는별로 흥미롭지 않습니다.)
이러한 특수 절차를 하나의 객체로 통합하여 객체를 복제 할 수 있으므로 객체의 실제 유형을 결정하고 COPY-FOO 절차를 호출하여 작업을 수행 할 수 있습니다 (절차를 인라인으로 확장 할 수도 있음) . 당신은 COND와 형 결정 조건으로 정말 쉽게 구성 할 수 있습니다 ". 유형에 파견"
(define (copy-object obj)
(cond ((number? obj) (copy-number obj))
((boolean? obj) (copy-boolean obj))
...
))
이 상관없이이라고 불리는 유형의 자료에 대한 작업을 수행하기위한 일반적인 디자인 패턴입니다 그것은 실제로 이런 상황에서 너무 중요하지 않은 일반적인 프로그래밍을 수행하는 꽤 소름 - 가난한 방법입니다.
마지막으로 사본을 얻기 위해 평가할 수있는 것을 반환하는 주름이 추가되었습니다. 그뿐만 아니라 똑바로 무엇인지를 알 수 있습니다 :
(define (expr-returning obj)
(lambda() (copy-object obj)))
는 그런 다음 개체의
guile> (define x (list 1 2 3 4)) guile> (define y (expr-returning x)) guile> (define cx (y)) guile> x (1 2 3 4) guile> cx (1 2 3 4) guile> (set-cdr! x 'foo) guile> x (1 . foo) guile> z (1 2 3 4) etc.
어떤 종류의 같은 물건을 수행 할 수 있습니다 COPY-OBJECT을 위해 인수의 람다 표현식 내에서의 호출을 캡슐화 너 무슨 뜻이야? –
그냥 obj를 반환하지 않는 이유는 무엇입니까? 나는 당신이 파괴적인 수정을 계획하고 있다고 가정합니다. 왜 수정 된 사본을 반환하는 함수를 작성한 다음 계속 반복하여 원하는 동작을 제공합니까? – Marcin