--.--
--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

10.25
Thu
いろんな教科がばらばらに中間テストやるもんだから、なんかイライラしてます

一週間で終わってくれればいいのに!

はい、S式で表された加減乗除な数式をふつーの数式にしますー

相変わらず非常にくずみたいなこーどですが

これで綺麗になるかな


(defun convert (val)
	(if (stringp val)
		val
		(if (symbolp val)
			(symbol-name val)
			(princ-to-string val)
		)
	)
)


(defun check (sexpr)
	(if  (null sexpr)
		nil
		(if (listp (car sexpr))
			t
			(check (cdr sexpr))
		)
	)
)

(defun twoterm (sexpr)(concatenate 'string (convert (cadr sexpr)) (convert (car sexpr)) (convert (caddr sexpr))))

(defun neststrct (sexpr &optional (opcode nil))
	(if (null sexpr)
		nil
		(if (listp (car sexpr))
			(if (or (equal opcode '*) (equal opcode '/))
				(cons (concatenate 'string  "(" (s2nf (car sexpr)) ")") (neststrct (cdr sexpr) opcode))
				(cons (s2nf (car sexpr)) (neststrct (cdr sexpr)))
			)
			(if (or (equal (car sexpr) '*) (equal (car sexpr) '/))
				(cons (car sexpr) (neststrct (cdr sexpr) (car sexpr)))
				(cons (car sexpr) (neststrct (cdr sexpr) nil))
			)
		) 
	)	
)

(defun s2nf (sexpr)
	(if (or (numberp sexpr) (symbolp sexpr))
		(convert sexpr)
		(cond
		 
			((and (= (length sexpr) 3) (null (check sexpr)))
				(twoterm sexpr)
			)

			( (and (= (length sexpr) 2) (null (check sexpr)))
				(if (equal (car sexpr) '-)
					(concatenate 'string (convert (car sexpr)) (convert (cadr sexpr)))
					(concatenate 'string (convert (car sexpr)) "(" (convert (cadr sexpr)) ")")	
				)
			)
			((null (check sexpr))	
				(concatenate 'string  (s2nf (reverse (cdr (reverse sexpr)))) (convert (car sexpr)) (convert (car (last sexpr))))	
			)
			(t
				(s2nf (neststrct sexpr))
			)
		)
	)		
)



こないだの

でやると、例えばx^2+5x+3+sin(x^2)

(+ (+ (* 1 X) (* X 1)) (+ (* 0 X) (* 5 1)) 0 (* (+ (* 1 X) (* X 1)) (COS (* X X))))

になりますが、

これをやると、

"1*X+X*1+0*X+5*1+0+(1*X+X*1)*(COS(X*X))" になる。!

なんて読みやすいんだ!!!!!!あ?ざけんな
スポンサーサイト
comment 0 trackback 1
トラックバックURL
http://telracsmoratori.blog.fc2.com/tb.php/145-5c8128fe
トラックバック
いろんな教科がばらばらに中間テストやるもんだから、なんかイライラしてます 一週間で終わってくれれば
まとめ【きれいにひょうじ。り】 | まっとめBLOG速報 | 2012.11.04 08:55
コメント
管理者にだけ表示を許可する
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。