🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fj.lang.lisp
Article #157

Re: MS-DOS 動作可能な LISP を探しています。

#157
From: KURODA Hisao / くろだ ひさお
Date: Mon, 30 Mar 1998 00:00
63 lines
2912 bytes
In article <01bd599f$6612eb70$618bf7ca@melchior> "Seiji Mizumoto" <ayanami0@kt.rim.or.jp> writes:

 | > > (defun p () (p))
 | > P
 | > > (p)
 | > error: evaluation stack overflow
 | 
 | 上記の記述でFreeBSDの世界でもスタックオーバーフローを起こすのですか...

Common Lisp系のインタープリタだと末尾再帰は見てくれないと思いますので、
スタックオーバーフローになります。大抵のCommon Lispではコンパイラにか
ければ末尾再帰処理をしてくれますが、640M環境では求めるのが無理なような
気がします。
しっかり実装されたSchemeならば末尾再帰を見てくれますので、次のようなプ
ログラムは無限ループになります。

SCM version 5b2, Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997 Free Software Foundation.

> (define (p) (p))
;Evaluation took 0 mSec (0 in gc) 18 cells work, 33 bytes other
#<unspecified>
> (p)

 | 再帰処理を行うのが奇麗なコーティングだと思っているのですが、この場合、
 | プログラムのループ処理等の使用には(DO (....)) とかのループ処理を行う関数を
 | 用いた方が良いのでしょうか?  u-n?!

このあたりをエレガントにやりたいならば、末尾再帰を見てくれるSchemeにノ
リカエるのをお薦めします^^。

 | 	(setq  xx  '(  A1  A2  A3  A4   .....))
 | 
 | でxxのリスト(?)のA1/A2/A3......の値をA1をB1/A2をB2/A3をB3に置き換えを行う
 | 場合についてどの様に行えば良いのでしょうか?(イメージは通常の配列処理です)
 | 
 | A1については
 | 
 | 	(setq  xx  (cons  'B1  '(cdr  xx)) ) 
 | 
 | で、xxのリストは(B1 A2 A3 A4
 | ....)となるのは、理解できたのですが、関数として
 | A2または、A3....の置き換えを実現する場合、どの様に考えれば良いのか悩んで
 | います。  お手数ですが、ヒントを教えて頂けましたら幸いです。

「置き換え」が破壊的かそうで無いかで違ってきますが、

> (setq xx '(a1 a2 a3))
(A1 A2 A3)
> (rplaca (cdr xx) 'b2)
(B2 A3)
> xx
(A1 B2 A3)
> (rplaca (cddr xx) 'b3)
(B3)
> xx
(A1 B2 B3)
> 
とかでは駄目ですか?

;;; $Id: .signature,v 1.3 1996/09/20 07:06:26 kuroda Exp $
(define (くろだ ひさお)
  (email kuroda@msi.co.jp))
Technical Details
Message-ID: <KURODA.98Mar30183656@msi.co.jp>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS
X-Google-Thread: 1421c0,f4eac1decc4bb3d1
X-Google-Attributes: gid1421c0,public
From: kuroda@msi.co.jp (KURODA Hisao / くろだ ひさお)
Subject: Re: MS-DOS 動作可能な LISP を探しています。
Date: 1998/03/30
Message-ID: <KURODA.98Mar30183656@msi.co.jp>
X-Deja-AN: 339076313
X-Nsubject: Re: MS-DOS $BF0:n2DG=$J(B LISP $B$rC5$7$F$$$^$9!#(B
Content-Type: text/plain; charset=ISO-2022-JP
Organization: Mathematical Systems Inc.,Tokyo,Japan / 株式会社 数理システム
Mime-Version: 1.0
Newsgroups: fj.lang.lisp