[Anthy-dev 2917] Re: r5rs: 名前の整理

Back to archive index

YamaKen yamak****@bp*****
2006年 4月 27日 (木) 18:41:39 JST


ヤマケンです。
まだこの話続けんのかよ!と言われそうですが。

At Sat, 07 Jan 2006 13:43:22 -0800,
jun.l****@gmail***** wrote:
> 
> YamaKen <yamak****@bp*****> writes:
> 
> > ・HOGEP()スタイル
> >
> >   - SCM_ATRUEP, ATRUEP  (a true valueの意。以前スルーされたけど)
> >   - SCM_TRUESP, TRUESP  (trueの複数形。上と同義だが'true'が識別しやすい)
> >   - SCM_TRUEVP, TRUEVP  (true value. 'V'が目立つので'true'が識別しやすい)
> >   - SCM_TRUEP,  TRUEP   (#tではない事を意識に叩き込んで使う)
> >
> > ・TEST()スタイル
> >
> >   - SCM_BOOL, BOOL      (boolean expression. 型名っぽいのが難)
> >   - SCM_B,    B         (BOOLの短縮形)
> >   - SCM_COND, COND      (condition. syntaxのcondと紛らわしいけど)
> >   - SCM_C,    C         (CONDの短縮形)
> 
> やっぱあんまり乗り気になれません。!FALSEP() と↑の提案とでわかりにくさ
> に大した差が出ると思えません。むしろ他の Scheme 処理系 (Gauche, Guile,
> etc) との不整合で読む側の負担が増えそう。
> 
> あえて名付けるなら SCM_IF() にしますが、これはこれで嬉しくないし。
> 
> SCM_IF(scm_p_memq(...)) or if (SCM_IF(scm_p_memq(...)))
> 
> 結局 FOO() で書くことにしたとして、読む側が FOO() の意味は何? と問うよ
> うなものならば結局 !FALSEP() だよ、となるわけで、!FALSEP に慣れるか 
> FOO に慣れるかでは違いは無いでしょう。
> 
> そんなわけで相変わらず反対。

懲りずに別案ですが、SCM_TRUTH()はどうでしょう。

if (TRUTH(scm_p_memq(key, lst)))
if (!TRUTH(scm_p_zerop(n)))

個人的にはこれならムリヤリ感も無く受け入れ可能と感じます。

ついでに、他の処理系の事情も手元にあった分で適当に調べてみました。
結構バラバラで結局は処理系毎に意識を変える必要があるんで、
SigSchemeの事だけ考えて決めてしまって良いと思います。

TEST()スタイル:
  Bigloo

FALSEP(), TRUEP()スタイル:
  Guile, MzScheme, QScheme, TinyScheme, (Bigloo)

FALSEP(), !FALSEP()スタイル:
  Gauche, Scheme48, SCM, MIT, Gambit-C


Bigloo 2.6f:
#define TRUEP( c )         ((bool_t)(c != BFALSE))
#   define CBOOL( o )      (o != BFALSE)
   switch( CBOOL( bfork ) && (pid = fork()) ) {

Guile 1.8.0:
#define scm_is_false(x) scm_is_eq ((x), SCM_BOOL_F)
#define scm_is_true(x)  !scm_is_false (x)
/* Discouraged because they do not follow the naming convention.  That
   is, they end in "P" but return a C boolean.  Also, SCM_BOOLP
   evaluates its argument twice.
*/
#define SCM_FALSEP		scm_is_false
#define SCM_NFALSEP		scm_is_true
  if (scm_is_true (scm_eqv_p (SCM_CAR (tmp), key)))
  if (! scm_is_false (scm_eqv_p (SCM_CAR (lst), x)))
  if (scm_is_false (scm_equal_p (SCM_CAR (x), SCM_CAR (y))))

MzScheme v209:
#define SCHEME_FALSEP(obj)     SAME_OBJ((obj), scheme_false)
#define SCHEME_TRUEP(obj)     (!SCHEME_FALSEP(obj))
  int for_exp = (SCHEME_TRUEP(SCHEME_CADR(data)) ? 1 : 0);
  if (SCHEME_FALSEP(scheme_positive_p(1, &e))) {

QScheme 0.5.1:
#define SCM_FALSEP(x)		((x) == scm_false)
#define SCM_TRUEP(x)		((x) != scm_false)
  if (scm_equal(SCM_AREF(a1,i), SCM_AREF(a2,i)) == scm_false)
  if (scm_eqv(SCM_CAR(l), n) != scm_false) {

TinyScheme 1.35:
#define is_true(p)       ((p) != sc->F)
#define is_false(p)      ((p) == sc->F)
  if (is_true(sc->value))
  if (is_false(sc->value)) {

Gauche 0.8.7:
#define SCM_FALSEP(obj)     ((obj) == SCM_FALSE)
#define SCM_TRUEP(obj)      ((obj) == SCM_TRUE)
#define SCM_BOOL_VALUE(obj)  (!SCM_FALSEP(obj))
  if (SCM_FALSEP(Scm_Memq(SCM_OBJ(cs), ctx->sets))) {
  if (!SCM_FALSEP(Scm_Memq(h, SCM_CDR(*tp)))) {

Scheme48 1.2:
#define S48_TRUE_P(v) ((v) == S48_TRUE)
#define S48_FALSE_P(v) ((v) == S48_FALSE)
#define S48_EXTRACT_BOOLEAN(v) ((v) != S48_FALSE)

SCM 5d9:
#define FALSEP(x) (BOOL_F==(x))
#define NFALSEP(x) (BOOL_F != (x))
  if NFALSEP(eqv(CAR(lst), x)) return lst;
  if FALSEP(eqp(RVREF(ra1, i1, e1), RVREF(ra2, i2, e2)))

MIT/GNU Scheme 7.7.90:
#define OBJECT_TO_BOOLEAN(object) ((object) != SHARP_F)
  if ((FAST_PAIR_CAR (weak_pair)) != SHARP_F)
  if (symbol == SHARP_F)

Gambit-C 4.0 beta12:
#define ___FALSEP(x)((x)==___FAL)
  ___IF(___NOT(___FALSEP(___R1)))
  ___IF(___FALSEP(___R2))

-------------------------------
ヤマケン yamak****@bp*****



Anthy-dev メーリングリストの案内
Back to archive index