는, 렉스/Yacc에 또는 동등한 가장 쉬운 방법은, 다음 "파생"재귀 쓰기 (, 당신은 거의 모든 언어에 해당하는 일을 할 수있는이 보통 리스프 상황에서 촬영하는 경우에도)을 S-expression로 문자열을 구문 분석 기능 . OCaml의 틱 방언이 같은에서 :
let rec derive var = function
| Const(_) -> Const(0)
| Var(x) -> if x = var then Const(1) else Deriv(Var(x), Var(var))
| Add(x, y) -> Add(derive var x, derive var y)
| Mul(a, b) -> Add(Mul(a, derive var b), Mul(derive var a, b))
...
(당신은 OCaml의 구문을 모르는 경우 - derive
가 첫 번째 매개 변수와 변수 이름이 파라미터 재귀 함수이고, 두 번째는 연속 선에 mathched되고 예를 들어,이 매개 변수가 Add(x, y)
형식의 구조 인 경우 구조체 Add
은 두 개의 필드에서 파생되어 x
의 값을 가지며 도출 된 y
을 반환하고 다른 경우에는 derive
이 매개 변수로받을 수있는 것과 유사하게 첫 번째로는 _
패턴은 "무엇이든 일치"를 의미 함)
Afte r이 결과 표현을 정돈하기위한 정리 기능이있을 수 있습니다 (분수 감소 등).)하지만 복잡해지며 파생 자체에 필요하지 않습니다. 즉, 파생되지 않은 항목은 여전히 정답입니다. 의 S-EXP 당신의 변환이 완료
는
정확히 무엇을하려고합니까? 상징적 인 차별화? – SLaks
금융 또는 수학? –
숫자 차별화는 간단합니다. 기호가 분명히 까다 롭지 만 출력을 단순화 할 필요가 없다면 매우 쉽게 수행 할 수 있습니다. –