6

私は Common Lisp を楽しんでいますが、次のような単純な数式を入力するのが本当に苦痛な場合があります。

a(8b^2+1)+4bc(4b^2+1)

(確かにこれを変換できますが、ちょっと遅いです。最初に (+ () ()) を書き、次に各ブラケットに (* () ()) を入れます...)

ここで誰かがこれを入力するより良い方法を知っているかどうか疑問に思っています。私は数学マクロを書くことを考えていました。

(math “a(8b^2+1)+4bc(4b^2+1)”) 

に展開します

(+ (* a (1+ (* 8 b b))) (* 4 b c (1+ (* 4 b b))))

しかし、名前が長い変数の解析は問題です。

誰かがより良い提案をしていますか?

4

3 に答える 3

27

この目的のためのリーダー マクロがあります。

参照: http://www.cliki.net/infix

例えば:

CL-USER 17 > '#I(a*(8*b^^2+1)+ 4*b*c*(4*b^^2+1) )
(+ (* A (+ (* 8 (EXPT B 2)) 1)) (* 4 B C (+ (* 4 (EXPT B 2)) 1)))

'は通常の引用です。#I( some-infix-expression )リーダーマクロです。

于 2012-08-12T18:54:30.020 に答える