demo_basic_diff.htm

来自「Delphi脚本控件」· HTM 代码 · 共 450 行 · 第 1/3 页

HTM
450
字号
<html>
<head>
<link rel=stylesheet type="text/css" href="styles.css">
</head>

<body>

<h3>
LISPPA: Symbolic differentiation (paxBasic).
</h3>
<hr>

<blockquote>
<pre>
<font color="blue"><b>Dim</b></font>  X       = <font color="Red">"X"</font>
<font color="blue"><b>Dim</b></font>  OP_ADD  = <font color="Red">"+"</font>
<font color="blue"><b>Dim</b></font>  OP_MULT = <font color="Red">"*"</font>
<font color="blue"><b>Dim</b></font>  OP_SUB  = <font color="Red">"-"</font>
<font color="blue"><b>Dim</b></font>  OP_DIV  = <font color="Red">"/"</font>
<font color="blue"><b>Dim</b></font>  OP_UN   = <font color="Red">"~"</font>
<font color="blue"><b>Dim</b></font>  OP_LOG  = <font color="Red">"ln"</font>
<font color="blue"><b>Dim</b></font>  OP_POW  = <font color="Red">"^"</font>

<font color="blue"><b>Function</b></font> IsVar(Term <font color="blue"><b>As</b></font> <font color="blue"><b>Variant</b></font>) <font color="blue"><b>As</b></font> <font color="blue"><b>Boolean</b></font>
  <font color="blue"><b>If</b></font> isString(Term) <font color="blue"><b>Then</b></font>
    <font color="blue"><b>If</b></font> Term = <font color="Red">"X"</font> <font color="blue"><b>Then</b></font>
      <font color="blue"><b>Return</b></font> true
    <font color="blue"><b>End</b></font> <font color="blue"><b>If</b></font>
  <font color="blue"><b>End</b></font> <font color="blue"><b>If</b></font>
  <font color="blue"><b>Return</b></font> false
<font color="blue"><b>End</b></font> <font color="blue"><b>Function</b></font>

<font color="blue"><b>Function</b></font> IsConstant(Term <font color="blue"><b>As</b></font> <font color="blue"><b>Variant</b></font>) <font color="blue"><b>As</b></font> <font color="blue"><b>Boolean</b></font>
  <font color="blue"><b>Return</b></font> isNumber(Term)
<font color="blue"><b>End</b></font> <font color="blue"><b>Function</b></font>

<font color="blue"><b>Function</b></font> IsZero(Term <font color="blue"><b>As</b></font> <font color="blue"><b>Variant</b></font>) <font color="blue"><b>As</b></font> <font color="blue"><b>Boolean</b></font>
  <font color="blue"><b>If</b></font> IsConstant(Term) <font color="blue"><b>Then</b></font>
    <font color="blue"><b>If</b></font> Term = 0 <font color="blue"><b>Then</b></font>
      <font color="blue"><b>Return</b></font> true
    <font color="blue"><b>End</b></font> <font color="blue"><b>If</b></font>
  <font color="blue"><b>End</b></font> <font color="blue"><b>If</b></font>
  <font color="blue"><b>Return</b></font> false
<font color="blue"><b>End</b></font> <font color="blue"><b>Function</b></font>

<font color="blue"><b>Function</b></font> IsUnit(Term <font color="blue"><b>As</b></font> <font color="blue"><b>Variant</b></font>) <font color="blue"><b>As</b></font> <font color="blue"><b>Boolean</b></font>
  <font color="blue"><b>If</b></font> IsConstant(Term) <font color="blue"><b>Then</b></font>
    <font color="blue"><b>If</b></font> Term = 1 <font color="blue"><b>Then</b></font>
      <font color="blue"><b>Return</b></font> true
    <font color="blue"><b>End</b></font> <font color="blue"><b>If</b></font>
  <font color="blue"><b>End</b></font> <font color="blue"><b>If</b></font>
  <font color="blue"><b>Return</b></font> false
<font color="blue"><b>End</b></font> <font color="blue"><b>Function</b></font>

<font color="blue"><b>Function</b></font> IsCompound(Term <font color="blue"><b>As</b></font> <font color="blue"><b>Variant</b></font>) <font color="blue"><b>As</b></font> <font color="blue"><b>Boolean</b></font>
  <font color="blue"><b>Return</b></font> isPaxArray(Term)
<font color="blue"><b>End</b></font> <font color="blue"><b>Function</b></font>

<font color="blue"><b>Function</b></font> IsPow(Term <font color="blue"><b>As</b></font> <font color="blue"><b>Variant</b></font>) <font color="blue"><b>As</b></font> <font color="blue"><b>Boolean</b></font>
  <font color="blue"><b>If</b></font> IsCompound(Term) <font color="blue"><b>Then</b></font>
    <font color="blue"><b>If</b></font> Term(0) = OP_POW <font color="blue"><b>Then</b></font>
      <font color="blue"><b>Return</b></font> true
    <font color="blue"><b>End</b></font> <font color="blue"><b>If</b></font>
  <font color="blue"><b>End</b></font> <font color="blue"><b>If</b></font>
  <font color="blue"><b>Return</b></font> false
<font color="blue"><b>End</b></font> <font color="blue"><b>Function</b></font>

<font color="blue"><b>Function</b></font> IsMult(Term <font color="blue"><b>As</b></font> <font color="blue"><b>Variant</b></font>) <font color="blue"><b>As</b></font> <font color="blue"><b>Boolean</b></font>
  <font color="blue"><b>If</b></font> IsCompound(Term) <font color="blue"><b>Then</b></font>
    <font color="blue"><b>If</b></font> Term(0) = OP_MULT <font color="blue"><b>Then</b></font>
      <font color="blue"><b>Return</b></font> true
    <font color="blue"><b>End</b></font> <font color="blue"><b>If</b></font>
  <font color="blue"><b>End</b></font> <font color="blue"><b>If</b></font>
  <font color="blue"><b>Return</b></font> false
<font color="blue"><b>End</b></font> <font color="blue"><b>Function</b></font>

<font color="blue"><b>Function</b></font> IsAdd(Term <font color="blue"><b>As</b></font> <font color="blue"><b>Variant</b></font>) <font color="blue"><b>As</b></font> <font color="blue"><b>Boolean</b></font>
  <font color="blue"><b>If</b></font> IsCompound(Term) <font color="blue"><b>Then</b></font>
    <font color="blue"><b>If</b></font> Term(0) = OP_ADD <font color="blue"><b>Then</b></font>
      <font color="blue"><b>Return</b></font> true
    <font color="blue"><b>End</b></font> <font color="blue"><b>If</b></font>
  <font color="blue"><b>End</b></font> <font color="blue"><b>If</b></font>
  <font color="blue"><b>Return</b></font> false
<font color="blue"><b>End</b></font> <font color="blue"><b>Function</b></font>

<font color="blue"><b>Function</b></font> IsSub(Term <font color="blue"><b>As</b></font> <font color="blue"><b>Variant</b></font>) <font color="blue"><b>As</b></font> <font color="blue"><b>Boolean</b></font>
  <font color="blue"><b>If</b></font> IsCompound(Term) <font color="blue"><b>Then</b></font>
    <font color="blue"><b>If</b></font> Term(0) = OP_SUB <font color="blue"><b>Then</b></font>
      <font color="blue"><b>Return</b></font> true
    <font color="blue"><b>End</b></font> <font color="blue"><b>If</b></font>
  <font color="blue"><b>End</b></font> <font color="blue"><b>If</b></font>
  <font color="blue"><b>Return</b></font> false
<font color="blue"><b>End</b></font> <font color="blue"><b>Function</b></font>

<font color="blue"><b>Function</b></font> IsNeg(Term <font color="blue"><b>As</b></font> <font color="blue"><b>Variant</b></font>) <font color="blue"><b>As</b></font> <font color="blue"><b>Boolean</b></font>
  <font color="blue"><b>If</b></font> IsCompound(Term) <font color="blue"><b>Then</b></font>
    <font color="blue"><b>If</b></font> Term(0) = OP_UN <font color="blue"><b>Then</b></font>
      <font color="blue"><b>Return</b></font> true
    <font color="blue"><b>End</b></font> <font color="blue"><b>If</b></font>
  <font color="blue"><b>End</b></font> <font color="blue"><b>If</b></font>
  <font color="blue"><b>Return</b></font> false
<font color="blue"><b>End</b></font> <font color="blue"><b>Function</b></font>

<font color="blue"><b>Function</b></font> Diff(A <font color="blue"><b>As</b></font> <font color="blue"><b>Variant</b></font>) <font color="blue"><b>As</b></font> <font color="blue"><b>Variant</b></font>
  <font color="blue"><b>Dim</b></font> X1, X2, R1, R2, R3 <font color="blue"><b>As</b></font> <font color="blue"><b>Variant</b></font>
  <font color="blue"><b>Dim</b></font> Oper <font color="blue"><b>As</b></font> <font color="blue"><b>String</b></font>
  <font color="blue"><b>If</b></font> IsCompound(A) <font color="blue"><b>Then</b></font>
    Oper = A(0)
    X1 = <font color="blue"><b>AddressOf</b></font> A(1)
    <font color="blue"><b>If</b></font> A.length >= 3 <font color="blue"><b>Then</b></font>
      X2 = <font color="blue"><b>AddressOf</b></font> A(2)
    <font color="blue"><b>End</b></font> <font color="blue"><b>If</b></font>

    <font color="blue"><b>If</b></font> Oper = OP_ADD <font color="blue"><b>Then</b></font>
      <font color="blue"><b>Return</b></font> [Oper, Diff(X1), Diff(X2)]
    <font color="blue"><b>ElseIf</b></font> Oper = OP_SUB <font color="blue"><b>Then</b></font>
      <font color="blue"><b>Return</b></font> [Oper, Diff(X1), Diff(X2)]
    <font color="blue"><b>ElseIf</b></font> Oper = OP_UN <font color="blue"><b>Then</b></font>
      <font color="blue"><b>Return</b></font> [Oper, Diff(X1)]
    <font color="blue"><b>ElseIf</b></font> Oper = OP_MULT <font color="blue"><b>Then</b></font>
      <font color="blue"><b>Return</b></font> [OP_ADD, [OP_MULT, Diff(X1), X2], [OP_MULT, X1, Diff(X2)]]
    <font color="blue"><b>ElseIf</b></font> Oper = OP_DIV <font color="blue"><b>Then</b></font>
      R1 = [OP_DIV, Diff(X1), X2]
      R2 = [OP_MULT, X1, Diff(X2)]
      R3 = [OP_MULT, X2, X2]
      <font color="blue"><b>Return</b></font> [OP_SUB, R1, [OP_DIV, R2, R3]]
    <font color="blue"><b>ElseIf</b></font> Oper = OP_LOG <font color="blue"><b>Then</b></font>
      <font color="blue"><b>Return</b></font> [OP_DIV, Diff(X1), X1]
    <font color="blue"><b>ElseIf</b></font> Oper = OP_POW <font color="blue"><b>Then</b></font>
      R1 = [OP_MULT, Diff(X1), [OP_MULT, X2, [OP_POW, X1, [OP_SUB, X2, 1]]]]
      R2 = [OP_MULT, Diff(X2), [OP_MULT, [OP_LOG, X1], [OP_POW, X1, X2 ]]]
      <font color="blue"><b>Return</b></font> [OP_ADD, R1, R2]
    <font color="blue"><b>Else</b></font>
      <font color="blue"><b>println</b></font> <font color="Red">"Syntax error !"</font>
    <font color="blue"><b>End</b></font> <font color="blue"><b>If</b></font>
  <font color="blue"><b>ElseIf</b></font> IsVar(A) <font color="blue"><b>Then</b></font>
    <font color="blue"><b>Return</b></font> 1
  <font color="blue"><b>Else</b></font>
    <font color="blue"><b>Return</b></font> 0
  <font color="blue"><b>End</b></font> <font color="blue"><b>If</b></font>
<font color="blue"><b>End</b></font> <font color="blue"><b>Function</b></font>

<font color="blue"><b>Function</b></font> InOrder(A <font color="blue"><b>As</b></font> <font color="blue"><b>Variant</b></font>) <font color="blue"><b>As</b></font> <font color="blue"><b>String</b></font>
  <font color="blue"><b>Dim</b></font> LL, RR, Oper <font color="blue"><b>As</b></font> <font color="blue"><b>String</b></font>
  <font color="blue"><b>If</b></font> IsCompound(A) <font color="blue"><b>Then</b></font>
    <font color="blue"><b>If</b></font> A.length = 2 <font color="blue"><b>Then</b></font>
      Oper = A(0)
      <font color="blue"><b>If</b></font> Oper = OP_UN <font color="blue"><b>Then</b></font>
        Oper = OP_SUB
      <font color="blue"><b>End</b></font> <font color="blue"><b>If</b></font>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?