
No.3ベストアンサー
- 回答日時:
> 変数を大域変数にしておけばいいのですね。
下記のようにやったらうまくいきました。あと、大域変数だけじゃなくって、letで定義した局所変数対象でもうまくいくんじゃないでしょうか。
> (let ((x 10))
(setq x 20)
x)
> 20
> OK! ISLisp というのが処理系の名前でした。
ああ、沖電気工業が作った処理系かな?
多分ISLISPの仕様が決まってからすぐさま作ってくれた元々は商用の処理系だったと思いますけど。
> Common Lispはシステムが大きく、初心者には荷が重いです。
そうですね。かなりデカいのは事実です。
ぶっちゃけ、Lisp初心者にはCL系よりもSchemeかSchemeの亜種の方が向いてますよね。
世界的に一番売れてる、っつーか使われてるLisp処理系は、今だと多分Racketだと思います。
Racket:
https://racket-lang.org/
オールインワンのタイプで、昔のBASICよろしく、インストール、即起動、IDE付きってんで、簡易性から言うとこれに勝てるLispはありません。多分これが世界的に一番人気です。
また、自分が書いたソースコードをコンパイルしてスタンドアロンのexeを作れる辺りでもオススメです(ただ、日本語が絡むとコンパイルが失敗する、ってぇのが玉に瑕)。
> 昔々16ビットPC用のmu-Lispという処理系でちょっとだけ遊んだことがあるので、またやってみたくなりました。
テキサス・インスツルメンツ制のCommon Lispのサブセットかしら?
昔のTIってLispマシンも作ってたし、割にLispには本腰いれてたんですよね(笑)。
> そのときはいきなりsetqを使っても問題なかったような記憶があります。
はいそうです。
ってか、今のCommon LispやSchemeでもそうなんですよ。
Common Lisp Hyper Specだと
CLHS(setq):
http://www.lispworks.com/documentation/HyperSpec …
何も書いてないんですが、一方、defparameterやdefvarで一旦変数をキチンと定義しないでsetqをいきなり使えば警告を出す処理系も多いですね。
Racketの場合は、ISLISPと同様に、一旦defineで変数を定義しないでいきなりset!を使うとエラーを出します。
写真: Racketの例。defineで変数定義をせずset!(Common Lispで言うsetq)をいきなり使おうとするとエラーを食らう。

この回答へのお礼
お礼日時:2021/08/04 23:23
cametan_42さん、ありがとうございます。おー、Racket。いかにも軽くていいネーミングです。こちらも使ってみたいと思います。それにしても、Lispファミリーは半端ない数ですね。
mu-Lispは現在でもあるようで、ご推察のようにTI社が関係しているようです。どうもお金がかかるみたいです。
http://www.edm2.com/index.php/MuLISP#Author_.26_ …
完璧な回答のため、ベストアンサーといたします。ありがとうございました。
No.2
- 回答日時:
あ、ちなみに、
> 学習用に簡単に使えるLispの処理系 ISLisp
ではないです。
ISLISPは処理系の名前じゃありません。
ISLISPはISO(国際標準化機構)で唯一公式に制定されてるLisp方言の「規格」であって、処理系の名前じゃないんですよ。
むしろ、生憎、処理系の数がどっちかっつーと「無い」とか「少ない」と言うレベルの、ぶっちゃけ「存在自体が殆ど忘れ去られた」Lispの規格、って言って過言じゃないです。
JIS(日本産業規格)にも制定されてる唯一のLisp系規格なんですけどね。
どこで入手されたか知らないですが、学習用じゃなくって、むしろ珍しいですね(笑)。どーやって入手したんだろ(笑)。
No.1
- 回答日時:
ええとですね。
setqでいきなり変数を定義出来るのはCommon Lispなんですよね(非推奨だけど)。
ISLISPの場合、大域変数的にdefglobalとかdefdynamicとしてxを定義しておくか、あるいはletで局所変数としてxを定義しておいて、「束縛を変更する」時にしかsetqって使えないんじゃないかしらん。
Unbound Variable: X
と言うメッセージはそれを表しています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画像生成AIのプロンプトの作り...
-
vba 正規表現について教えてく...
-
pythonでのローカルファイルか...
-
if関数とは?
-
プログラム言語
-
今のプログラミング言語
-
vba クリップボードクリアにつ...
-
itエンジニアに就職希望で未経...
-
Pythonのエラーメッセージをコ...
-
P2P地震速報のEEW APIの仕様書...
-
著作権法について
-
プログラミングについて
-
自作scratch アニメの商用利用
-
Geminiフォーム 画像生成で 人...
-
数学、プログラミング、物理、...
-
Python 3.12.2 か一番最新のパ...
-
MOVEコマンドでサブフォルダー...
-
AIがプログラムする時代のプロ...
-
pythonについて(初心者です)
-
pythonでhtmlファイルの指定文...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
End Sub が必要です。
-
フォートランのエラーについて...
-
VBでエラー'ActiveX component ...
-
他クラスからForm1内コントロル...
-
対応する関数ヘッダーがありません
-
intel fortranのエラーで困って...
-
フォートラン(fortran)のエラー...
-
クラスに volatile は必要?
-
Excel VABについて 下記記述が...
-
Delphiでif文がうまく書けないです
-
ラズパイ上の、pythonのエラー...
-
Excel VBA: UserForm.Show で実...
-
コンパイルエラー
-
ISLispのsetq関数について教え...
-
C# IEnumerable が IEnumerable...
-
typedef による2重定義
-
構造体のポインタ参照
-
C2065: 'EnumDisplayDevices' :...
-
STL mapでアクセス違反
-
43:syntax error at end of input
おすすめ情報
cametan_42さん、ありがとうございます。変数を大域変数にしておけばいいのですね。下記のようにやったらうまくいきました。
>(defglobal x 10)
x
>x
10
>(setq x 20)
20
>x
20
ISLispは規格の名前でしたか。こちらのサイトで見つけました。
http://www.islisp.org/index-jp.html
OK! ISLisp というのが処理系の名前でした。.exeファイル1つだけで動くので、簡単でよいと思いました。Common Lispはシステムが大きく、初心者には荷が重いです。
昔々16ビットPC用のmu-Lispという処理系でちょっとだけ遊んだことがあるので、またやってみたくなりました。そのときはいきなりsetqを使っても問題なかったような記憶があります。