Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

1018の発展課題rat classについて #401

Open
RailgunJu opened this issue Oct 31, 2021 · 2 comments
Open

1018の発展課題rat classについて #401

RailgunJu opened this issue Oct 31, 2021 · 2 comments

Comments

@RailgunJu
Copy link

sample programのrat.lのなかでいくつか理解できないところがあって、基礎的なものですが、
一つ目は、三行目の親クラスのところにpropertied-objectがあるんですが、なにを表してるんでしょうか。

2つ目は、
(:prin1 (strm) (format strm "~A/~A" numer denom))
の意味がわかりません。print文の仕組みなのでしょうか、なんでsendを使わずに自動的実行されるんですか。strmは何でしょうか。

また、setfとsetqは何が違うんですか。

@k-okada
Copy link
Member

k-okada commented Oct 31, 2021

propertied-object は,デフォルトの親クラスみたいなもので,Pythonだとobjectに相当するもの,という理解で良いとおもいます.
https://stackoverflow.com/questions/4015417/why-do-python-classes-inherit-object

EusLispは関数でもメンバ関数でも最後に評価(実行)された結果が,返り値になります.したがって,(format ...) の返り値がこのメンバ関数の返り値になります.
format はpythonのformat や Cのprintf と同じようにフォーマットする機能で,以下のように使います.

(format t "~A/~7,2f/~f~%" 10 1.234 1.234)
10/   1.23/1.2

第一引数のtは C言語のfprintf(s, "hello world\n")の第一引数みたいなもので,フォーマットの出力を示します.tだと標準出力です.それ以外はファイルなどが有りえます.面白い使い方としては,

(setq a (format nil "~A/~7,2f/~f~%" 10 1.234 1.234))
(print a)

などとできます.

setf は変数の一部を変更することができます.以下のようにリストやベクトルの要素を直接変更する時に利用します.

$ (setq a (list 1 2 3))
(1 2 3)
$ (print (elt a 1))
2
$ (setf (elt a 1) 10)
10
115.irteusgl$ (print a)
(1 10 3)
$ (setq b #f(1 2 3))
#f(1.0 2.0 3.0)
$ (print (elt b 1))
2.0
$ (setf (elt b 1) 10)
10
$ (print b)
#f(1.0 10.0 3.0)

===

http://euslisp.github.io/EusLisp/jmanual-node4.html

(defclass object :super NIL :slots ())
(defclass propertied-object :super object
     :slots (plist)) ;property list

http://euslisp.github.io/EusLisp/jmanual-node7.html

property-listを持つオブジェクトを定義する。 他のCommon Lispと違って、 EusLispは、たとえ、symbolでなかったとしても、property-listを持つ propertied-objectを継承するどんなオブジェクトも 許可する。

@RailgunJu
Copy link
Author

理解しました。
ご対応ありがとうございました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants