2012-11-02 4 views
1

이것은 어렵지는 않지만 붙어 있습니다. 우리는 함수의 파생물을 취하는 방법을 쓰고있는 간단한 과제를 가지고 있습니다.Scheme 언어를 사용하면 함수가 지수 함수인지 확인하는 방법

(define (derive exp var) 
(cond ((number? exp) 0) 
    ((variable? exp) (if (same-variable? exp var) 1 0)) 
    ((sum? exp) (derive-sum exp var)) 
    ((product? exp) (derive-product exp var)) 
    ((exponentiation? exp) (derive-exponentiation exp var)) 
    (else 'Error))) 

지수화의 경우 지수 함수가있는 경우 참을 반환해야합니다. 나는 그것을 쓰는 방법에 대해 완전히 확신하지 못한다. 지금까지 방금 이런 걸 얻었습니다

(define (make-exponentiation base exponent) 
    (cons base exponent) 

(define (base exponentiation) 
    (car exponentiation) 

(define (exponent exponentiation) 
    'cdr exponentiation) 

(define (exponentiation? exp) 
    'YourCodeHere) 

(define (derive-exponentiation exp var) 
    (* var (make-exponentiation exp (var-1)) (derive exp)) 

나는 car와 cdr에 대해 무엇을 검사하고 있는지 정확히 알지 못합니다. 모든 것이 혼란 스러울뿐입니다. 그것은 주어진 코드가 아닙니다. 나는 차와 cdr가 단지 순간에 자리 표시 자와 같다고 생각한다.

답변

3

내가 계획을 세웠으니 꽤 오랜 시간이 걸렸습니다. emacs lisp에 익숙하다. 따라서 소금 한 알을 가지고 가십시오 :

(define (make-exponentiation base exponent) 
    (list '^ base exponent)) 

(define (base exponentiation) 
    (car (cdr exponentiation))) 

(define (exponent exponentiation) 
    (car (cdr (cdr exponentiation)))) 

(define (exponentiation? exp) 
    (equal? (car exp) '^)) 

(define (derive-exponentiation exp var) 
    (let ((b (base exp)) 
     (e (exponent exp))) 
    (make-product e (make-exponentiation b (- e 1)))) 
+0

아 .. 안녕하세요. 우리가 이미 두 번째와 세 번째 용어를 반환하는 함수를 가지고 있기 때문에 실제로 더 좋습니다. 무리 감사! 나는 그것을 얻었다 고 생각한다. –

+0

기호를 비교하는 데'='을 사용하지 마십시오. 'eq?','eqv?'또는'equal?'을 대신 사용하십시오. IIRC,'='는 숫자 형에서만 정의됩니다. – Dirk

+0

@Dirk 고맙습니다. 고침. –

1

이상한 형식으로되어 있기 때문에 코드를 읽기가 어렵습니다. 다른 행에 다른 것들을 시도하고 분리해야합니다. Dr. Racket을 사용하는 경우 Tab 키를 누를 때마다 모든 내용이 표시되지만 동일한 줄에 여러 항목이있는 문제는 해결되지 않습니다.

어쨌든이 문제는 할당이 설정되는 방법과 취해야 할 입력의 종류에 따라 다릅니다. 당신은 태그를 사용할 수 있습니다 또는 당신은 단지 지수 지점에 아무것도 있는지 또는 단지 0 또는 1이라도 있는지 확인할 수 있습니다. 다시 말하지만 이것은 입력이 주어진 방법에 전적으로 달려 있습니다.