Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

MS-DOS$BF0:n2DG=$J(JLISP$B$rC5$7$F$$$^$9!#(J

48 views
Skip to first unread message

Seiji Mizumoto

unread,
Mar 21, 1998, 3:00:00 AM3/21/98
to

はじめまして、水本@リムネットです。

現在LIPSを勉強(Common LISP)するためにMS-DOS5.0Jで動作
可能なLISPを探しているのですが、以下のLISP以外に動作可能と
思われるものをご存知方、教えて下さい。
現在使用しているマシンは8086系640KBマシンです。

お手数ですが、お願いいたします。

試したもの
XLISP2.0 ......... 動作不安定
RefLISP2.67...... 動作不安定
PCLISP3.0 ....... 参考書と違う関数が多いような.....(勉強不足かな?)
CLISP ................. 80386以降のマシンでしか動作しないのかな?

SASAKI Masato

unread,
Mar 23, 1998, 3:00:00 AM3/23/98
to

佐々木将人@函館 です。

>From:"Seiji Mizumoto" <ayan...@kt.rim.or.jp>
>Date:1998/03/21 16:01:13
>Message-ID:<01bd54e2$66a25a60$ba8bf7ca@melchior>
>
>現在LIPSを勉強(Common LISP)するためにMS-DOS5.0Jで動作
>可能なLISPを探しているのですが、以下のLISP以外に動作可能と
>思われるものをご存知方、教えて下さい。
>現在使用しているマシンは8086系640KBマシンです。

商用でよければ私が使っているmuLISPがあります。
common lispではありませんが、
common lispの関数の一部をライブラリとして提供しています。
速いことは速いのですがちょっと動作に癖があるのが難点なのと
フリーの処理系がある現在、どれだけ利用者がいるか……。
埼玉のソフテックで取り扱い。

あと、LifeboatのRun/lispもまだ販売しているかもしれない。

PC-Schemeはちょっとわからない……。

フリーorシェアウェアにこだわるのであれば
サーチエンジンで処理系を公開しているサイトが
いくつかひっかかるので、それを片端から試していくくらいでしょうか。

----------------------------------------------------------------------
今度はlisp.gcだよ。
We lispers and garbage collectors make a mailing-list
called "Tea Room Lisp.gc".....
c...@host.or.jp 佐々木将人
(This address is for NetNews.)
----------------------------------------------------------------------
建設省が政策を転換して路面電車の振興をはかるそうな。
「遅いぞ!」とは思いつつ評価するのであった……。

Shinji Kono

unread,
Mar 23, 1998, 3:00:00 AM3/23/98
to

河野 真治@琉球大情報工学です。

In article <19980323...@host.or.jp> ,
c...@host.or.jp (SASAKI Masato) writes
>商用でよければ私が使っているmuLISPがあります。

わお! 懐かしい... それって僕が最初に触ったLISPです。CP/M80
上で動かしたイライザを思い出してしまった。64kでも動くんです
よね。なんとscreen editorもついていたし。(もちろん、MSDOSに
なっていろいろ変わったのも知ってはいますが。つい.... )

>PC-Schemeはちょっとわからない……。

xscheme は少し使っていました。それほど不安定だとは思いません
でしたが、内蔵editor/debuggerぐらい欲しかったかな。

でも、本当に勉強するつもりなら、640kb では不足です。LISPの良
さは、メモリをじゃぶじゃぶ使ってこそわかります。

もし、どうでもいいというか、ちょっと触るだけなら、

> XLISP2.0 ......... 動作不安定

で我慢するのが良いと思います。j3100ss001 で使っていた時は、
特に不安定だとは感じませんでした。XLISPでだめなら、他に何を
使ってもダメでしょう。

なんていうのかなぁ... よほど自信がない限り、640k MSDOS5.0
ってのは使いこなせません。もう少しEMSメモリがあるとか、
DOS extendarがあるとかになると、ぐっとやさしくなります。
勉強するのにわざわざ難しい環境を選ぶのが良いかと言うと、
LISPに関しては違うでしょうね。

---
Shinji KONO @ Information Engineering, University of the Ryukyus
河野真治 @ 琉球大学工学部情報工学科


---
Shinji KONO @ Information Engineering, University of the Ryukyus
河野真治 @ 琉球大学工学部情報工学科

KURODA Hisao / くろだ ひさお

unread,
Mar 24, 1998, 3:00:00 AM3/24/98
to

In article <01bd54e2$66a25a60$ba8bf7ca@melchior> "Seiji Mizumoto" <ayan...@kt.rim.or.jp> writes:

| XLISP2.0 ......... 動作不安定

こいつくらいしかコメントできないのですが、動作不安定ですか?

ずいぶん前にxlisp-1.6をapple//gsへ移植したことがあるのですが、素直なコー
ドで不安定だとは思いませんでした。移植の過程でorca/cのコンパイラバグを
6つほど見つけましたが、xlispのソース中には深刻な個所は見つけることがで
きませんでした。

たしかautolispはxlispそのもので商用cadのスクリプト言語として組み込まれ
たほどなので、信頼性はあると思って良いのではないでしょうか? 今も
xlispstatとして生き残ってるようですし。

環境640Kということですと、Common Lisp系にこだわらないのであれば、
pc-schemeなどは本も出てますし「programming in scheme 0-262-55017-2」
お薦めできると思います。

;;; $Id: .signature,v 1.3 1996/09/20 07:06:26 kuroda Exp $
(define (くろだ ひさお)
(email kur...@msi.co.jp))

SASAKI Masato

unread,
Mar 24, 1998, 3:00:00 AM3/24/98
to

佐々木将人@函館 です。

>From:Shinji Kono
>Date:1998/03/23 18:26:21
>Message-ID:<13851.8...@rananim.ie.u-ryukyu.ac.jp>
>
>In article <19980323...@host.or.jp> ,
> c...@host.or.jp (SASAKI Masato) writes
>>商用でよければ私が使っているmuLISPがあります。
>
>わお! 懐かしい... それって僕が最初に触ったLISPです。CP/M80
>上で動かしたイライザを思い出してしまった。64kでも動くんです
>よね。なんとscreen editorもついていたし。(もちろん、MSDOSに
>なっていろいろ変わったのも知ってはいますが。つい.... )

最新バージョンでは4Gまでのメモリーが使えるそうな……。

>でも、本当に勉強するつもりなら、640kb では不足です。LISPの良
>さは、メモリをじゃぶじゃぶ使ってこそわかります。

この後半部は異論のあるところではないでしょうか?
(なんたってカシオのAI-1000なんてえ
 ポケットコンピューターもある。
 しかもまだ持っている(笑)
 HP-95LXにmuLISPもまた楽し(爆笑))
もしくはLISPに限ったことじゃないか。
(資源が多けりゃあそりゃあ暴れ放題=なんでもできる訳で。)

何のためにLISPを学ぶかによって違いますが、
LISP処理系自体が目標ならプログラムが小さい分
MS-DOS&640Kの方が見通せるという説もあります。
また数式処理を文字ベースでいいからやりたいだと、
MS-DOS&640Kで十分と言えます。
今ははやってないかもしれないけどderiveって数式処理ソフトは
muLISPで書かれている訳で……。
(というかderive作るためにできたのがMS-DOS版muLISPという話。)

とは言え、

>もう少しEMSメモリがあるとか、
>DOS extendarがあるとかになると、ぐっとやさしくなります。
>勉強するのにわざわざ難しい環境を選ぶのが良いかと言うと、
>LISPに関しては違うでしょうね。

には賛成です。
例えばメモリーが8MBまで確保できるようだと
MIT-SchemeのDOS版が動く訳ですから……。

Seiji Mizumoto

unread,
Mar 26, 1998, 3:00:00 AM3/26/98
to

水本@リムネットです。
みなさん、ありがとう御座います。 色々参考にさせて頂きます。

> | XLISP2.0 ......... 動作不安定
>
> こいつくらいしかコメントできないのですが、動作不安定ですか?

上記の件についてですが、再帰処理を行う関数を書いた(エラソウかな?)場合、
暴走してしまうのですが、RefLISPの場合は、スタックオーバーフローになって
しまうのでこりずに、CommonLISP系のCLISPで実行を行った場合もスタック
オーバーフローになってしまいますので、どうも書き方が良くないのではと
思っている今日この頃です。 お騒がせしています。


今後共に宜しくお願い致します。



KURODA Hisao / くろだ ひさお

unread,
Mar 27, 1998, 3:00:00 AM3/27/98
to

In article <01bd58d1$4b2ad7b0$438bf7ca@melchior> "Seiji Mizumoto" <ayan...@kt.rim.or.jp> writes:

| > | XLISP2.0 ......... 動作不安定
|

| 上記の件についてですが、再帰処理を行う関数を書いた(エラソウかな?)場合、
| 暴走してしまうのですが、RefLISPの場合は、スタックオーバーフローになって
| しまうのでこりずに、CommonLISP系のCLISPで実行を行った場合もスタック
| オーバーフローになってしまいますので、どうも書き方が良くないのではと
| 思っている今日この頃です。 お騒がせしています。

環境がDOSでもなければ640Kでも無いのであまり参考にならないかと思います
が、FreeBSD2.2.2での動作結果です。この環境では暴走はしないようです。

% xlispstat
XLISP-PLUS version 2.1g
Portions Copyright (c) 1988, by David Betz.
Modified by Thomas Almy and others.
XLISP-STAT 2.1 Release 3.44 (Beta).
Copyright (c) 1989-1994, by Luke Tierney.

> (defun p () (p))
P
> (p)
error: evaluation stack overflow
>

;;; $Id: .signature,v 1.3 1996/09/20 07:06:26 kuroda Exp $
(define (くろだ ひさお)

;; Who's on third?
;; No. Who's on first.
(email kur...@msi.co.jp))

Seiji Mizumoto

unread,
Mar 27, 1998, 3:00:00 AM3/27/98
to

水本@リムネットです。

> > (defun p () (p))
> P
> > (p)
> error: evaluation stack overflow

上記の記述でFreeBSDの世界でもスタックオーバーフローを起こすのですか...
ためしに、MS-DOSの世界のLISPでも発生します。
再帰関数の処理については、Stack Overflowは付き物なのでしょうか?
勉強中の自分ですが、LISPのプログラムコーティングでは、ループ処理を行う場合

再帰処理を行うのが奇麗なコーティングだと思っているのですが、この場合、
プログラムのループ処理等の使用には(DO (....)) とかのループ処理を行う関数を
用いた方が良いのでしょうか? u-n?!
ちなみに、(DO(...))を用いて同等の処理を行った場合は、問題有りませんでした。
色々と難しいですと思い日々勉強です。


この話とは別になりますが、

(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....の置き換えを実現する場合、どの様に考えれば良いのか悩んで
います。 お手数ですが、ヒントを教えて頂けましたら幸いです。

(配列処理については、C/Pascal/Basicとかの処理系と比べLISPでの置き換えを
考えた場合、難航不落です.....情けない.......)

再々の素人の質問ですみません。



Shinji Kono

unread,
Mar 28, 1998, 3:00:00 AM3/28/98
to

河野 真治@琉球大情報工学です。

In article <01bd58d1$4b2ad7b0$438bf7ca@melchior> ,
"Seiji Mizumoto" <ayan...@kt.rim.or.jp> writes
>上記の件についてですが、再帰処理を行う関数を書いた(エラソウかな?)場合、
>暴走してしまうのですが、....

もう記憶の限界ですが、MSDOS 3.x系のCの実行時stack sizeはかなり小さい
はずです。この大きさを指定するオプションがあるはずです。

(だから、いろいろ難しいんだってば.... EMM で動くversionもあったと
思うんだけど)

SASAKI Masato

unread,
Mar 29, 1998, 3:00:00 AM3/29/98
to

佐々木将人@函館 です。

>From:"Seiji Mizumoto" <ayan...@kt.rim.or.jp>
>Date:1998/03/27 16:44:19
>Message-ID:<01bd599f$6612eb70$618bf7ca@melchior>
>
>上記の記述でFreeBSDの世界でもスタックオーバーフローを起こすのですか...
>ためしに、MS-DOSの世界のLISPでも発生します。
>再帰関数の処理については、Stack Overflowは付き物なのでしょうか?

一般論としては有限な資源のところに無限の資源を要求するプログラムを書けば
エラーが出るのは当たり前なんで、
(出ないとかえって不便)
……上のプログラムが無限の資源を要求しているかどうかは
  自信がないけど……。

>勉強中の自分ですが、LISPのプログラムコーティングでは、ループ処理を行う場合
>、
>再帰処理を行うのが奇麗なコーティングだと思っているのですが、この場合、
>プログラムのループ処理等の使用には(DO (....)) とかのループ処理を行う関数を
>用いた方が良いのでしょうか? u-n?!
>ちなみに、(DO(...))を用いて同等の処理を行った場合は、問題有りませんでした。

lispらしさはなくなりますが
ループ処理の方が要求する資源が少なくてすむというのはあります。
(このあたりが資源が少ないと余計な気を使わなければならない点な訳で。)

>この話とは別になりますが、
>
> (setq xx '( A1 A2 A3 A4 .....))
>
>でxxのリスト(?)のA1/A2/A3......の値をA1をB1/A2をB2/A3をB3に置き換えを行う
>場合についてどの様に行えば良いのでしょうか?(イメージは通常の配列処理です)

common lispでリストでなくベクタで持っていたとして
(setf (aref '#(A1 A2 A3 A4 .....) 1) 'B2)
みたいなことをしたいという趣旨?

力技は思い浮かんだんだけど、
あまりにも力技なんで紹介するのは勘弁して(笑)

>(配列処理については、C/Pascal/Basicとかの処理系と比べLISPでの置き換えを
>考えた場合、難航不落です.....情けない.......)

lisp向きのデータ構造を考えた方がいいかもしれません。
かつては「属性リスト」を使うのが定石だったと思うんだけど……。
(検索や置き換えが自由自在)

Erio YOSHIDA

unread,
Mar 29, 1998, 3:00:00 AM3/29/98
to

"Seiji Mizumoto" <ayan...@kt.rim.or.jp> writes:

> 水本@リムネットです。
>
> > > (defun p () (p))
> > P
> > > (p)
> > error: evaluation stack overflow
>
> 上記の記述でFreeBSDの世界でもスタックオーバーフローを起こすのですか...
> ためしに、MS-DOSの世界のLISPでも発生します。

上記の記述では、LISP インタープリータなら、
Stack Overflow を起こすというのが、LISP の仕様でしょう。
#コンパイラにかけると、静かに無限ループに陥ってしまうかもしれない。

> 再帰関数の処理については、Stack Overflowは付き物なのでしょうか?

再帰関数のエラーで一番多いのは、
再帰終了条件が成立しないために、
Stack Overflowがおきるエラーです。
その意味では、Stack Overflowは付き物です。

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

ループからの脱出条件に問題がなく、
繰り返し回数が多い場合には、
ループ処理用 マクロを用いた方がいいでしょう。

> ちなみに、(DO(...))を用いて同等の処理を行った場合は、問題有りませんでした。
> 色々と難しいですと思い日々勉強です。


>
>
> この話とは別になりますが、
>
> (setq xx '( A1 A2 A3 A4 .....))
>
> でxxのリスト(?)のA1/A2/A3......の値をA1をB1/A2をB2/A3をB3に置き換えを行う
> 場合についてどの様に行えば良いのでしょうか?(イメージは通常の配列処理です)

何をしたいのか、よく理解できないので、何ともコメントできません。

SUZUKI Hisao

unread,
Mar 30, 1998, 3:00:00 AM3/30/98
to

鈴木です。

記事 <87ra3mu...@ku.erio.iijnet.or.jp> にて Erio YOSHIDA さん


>"Seiji Mizumoto" <ayan...@kt.rim.or.jp> writes:
>
>> 水本@リムネットです。
>>
>> > > (defun p () (p))
>> > P
>> > > (p)
>> > error: evaluation stack overflow
>>
>> 上記の記述でFreeBSDの世界でもスタックオーバーフローを起こすのですか...
>> ためしに、MS-DOSの世界のLISPでも発生します。
>
>上記の記述では、LISP インタープリータなら、
>Stack Overflow を起こすというのが、LISP の仕様でしょう。
>#コンパイラにかけると、静かに無限ループに陥ってしまうかもしれない。

これが Scheme なら,たとえインタープリタでも,
(Stack Overflow を起こさずに) 無限ループに陥ってしまうという
のが「仕様」かもしれない :-) (R5RS §3.5 参照)

# しょうもないチャチャを入れて失礼しました m(_ _)m

--
SUZUKI Hisao >>> def fib(n): return reduce(lambda x, y:
suz...@otsl.co.jp ... [x[0] + x[1]] + x, [None]*n, [1L, 1L])

KURODA Hisao / くろだ ひさお

unread,
Mar 30, 1998, 3:00:00 AM3/30/98
to

In article <01bd599f$6612eb70$618bf7ca@melchior> "Seiji Mizumoto" <ayan...@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 kur...@msi.co.jp))

0 new messages