質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
LISP

LISPはプログラミング言語の一種であり、関数型言語に分類されています。 特徴として、括弧を多様する独特の構文を持ちます。

Q&A

2回答

942閲覧

JSCLを利用したいのですが知識が無さすぎてどうすれば良いかわかりません

hojo

総合スコア195

LISP

LISPはプログラミング言語の一種であり、関数型言語に分類されています。 特徴として、括弧を多様する独特の構文を持ちます。

1グッド

0クリップ

投稿2018/05/31 16:22

編集2018/05/31 16:24

サーバサイドもクライアントサイドもCommon LispでプログラミングできるJSCLというものがあることを知りました。

https://github.com/jscl-project/jscl

対話形式のREPLで小さなLISPプログラムを評価するだけではLispの理解レベルが深まらないと思い、JSCLを使って小さなウェブアプリケーションを作成しようと思いました。

しかし知識がないため何から始めれば良いかわかりません。そこで、GithubのJSCLのREADME.mdに記載されているGetting StartedやBuildの項目を見ながら、とにかく手順通り従って操作してみようと考えました。

まずはGetting Startedからです。

bash

1npm install -g jscl

上記コマンドによって、jsclをインストールでき、jscl-replコマンドを入力することでjsclのrepl環境が実行されることがわかりました。

次に、Buildの項目なのですが、以下のコマンドを使ってどうやらテスト用のjsclプロジェクトファイルを落としてくるようです。

bash

1git clone https://github.com/jscl-project/jscl.git

上記コマンドにより、プロジェクトディレクトリにjsclディレクトリが作成されました。

次にREADME.mdでは「load jscl.lisp in your Lisp, and call the bootstrap function to compile the implementation itself:」と記載があります。

訳して「あなたのLISPにjscl.lispを読み込んで、bootstrap関数を評価してコンパイルしよう!」と解釈をしました。

ここで「あなたのLISP」の意味がわからなかったのですが、どうやら異なるLISP処理系を導入する必要がありそうでした。

CLISPを導入しようと思ったのですが最近ではSBCLが人気があるようなので、brew install sbclして処理系をインストールしました。

さて、次はjscl.lispを読んでみよう。ということで以下のコードを実行して見ました。

bash

1$ sbcl jscl/jscl.lisp 2This is SBCL 1.4.8, an implementation of ANSI Common Lisp. 3More information about SBCL is available at <http://www.sbcl.org/>. 4 5SBCL is free software, provided as is, with absolutely no warranty. 6It is mostly in the public domain; some portions are provided under 7BSD-style licenses. See the CREDITS and COPYING files in the 8distribution for more information. 9*

jscl.lispは読めたのだろうか?ちょっと疑問がいろいろありましたがとりあえず読めたと仮定して次のコードを入力して見ました。

sbcl

1* (jscl:bootstrap) 2 3debugger invoked on a SB-INT:SIMPLE-READER-PACKAGE-ERROR in thread 4#<THREAD "main thread" RUNNING {10005505B3}>: 5 Package JSCL does not exist. 6 7 Stream: #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDIN* {100001FB53}> 8 9Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL. 10 11restarts (invokable by number or by possibly-abbreviated name): 12 0: [ABORT] Exit debugger, returning to top level. 13 14(SB-IMPL::READER-FIND-PACKAGE "JSCL" #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDIN* {100001FB53}>)

どうやらエラーが出てしまったようです。JSCL does not exist.

ここで躓いてしまったのですが、そもそもこんなところでつまずくようでは、いかんですよね(汗

どうしたものか悩んだ末、とある掲示板で質問させていただいたのですが、このような場合teratailの方がより親切な回答をいただけると思いましたのでことわりを入れて投稿させていただいております。

目標はとりあえず、jsclを利用してサーバサイドlispが適当なhtmlを返し、クライアントサイドでもlispの評価ができる環境を得る事です。

しかし恥ずかしながら、lispを利用したプロジェクトファイルの作成経験がないため、そこに至ることができません。

私に必要な知識、または目的に合ったサンプルプログラム、またはその使い方など、是非アドバイスをいただけないでしょうか。

よろしくお願いいたします。

miyabi-sun👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

次のようにすると、jscl.lispをコンパイルしてjscl.jsを吐き出してくれます。

同じディレクトリ内にあるjscl.htmlを開くと、ブラウザ上でREPLが動きます。

jsからlispのコードを呼び出すには、ブラウザのコンソールでjscl.evaluateStringを使うとLispの環境をさわれます。

jscl.evaluateString("(+ 1 1)")

とすれば2とかえってきますし、

jscl.evaluateString("(defun f1()(+ 1 1))")

としてからREPLで(f1)とすれば2がかえってきます。

$ git clone https://github.com/jscl-project/jscl.git $ cd jscl $ sbcl This is SBCL 1.4.7, an implementation of ANSI Common Lisp. More information about SBCL is available at <http://www.sbcl.org/>. SBCL is free software, provided as is, with absolutely no warranty. It is mostly in the public domain; some portions are provided under BSD-style licenses. See the CREDITS and COPYING files in the distribution for more information. * (load "jscl.lisp") ; compiling file "jscl/src/compat.lisp" (written 08 MAY 2018 11:08:00 PM): ; compiling (DEFMACRO WHILE ...) ; compiling (DEFUN ASET ...) ; compiling (DEFUN CONCAT ...) ; compiling (DEFUN /DEBUG ...) ; compiling (DEFUN J-READER ...) ; compiling (SET-DISPATCH-MACRO-CHARACTER #\# ...) ; jscl/src/compat.fasl written ; compilation finished in 0:00:00.013 ; compiling file "jscl/src/utils.lisp" (written 08 MAY 2018 11:08:00 PM): ; compiling (/DEBUG "loading utils.lisp!") ; compiling (DEFMACRO WITH-COLLECT ...) ; compiling (DEFMACRO WITH-COLLECTOR ...) ; compiling (DEFMACRO CONCATF ...) ; compiling (DEFUN ENSURE-LIST ...) ; compiling (DEFUN !REDUCE ...) ; compiling (DEFUN JOIN ...) ; compiling (DEFUN JOIN-TRAILING ...) ; compiling (DEFUN MAPCONCAT ...) ; compiling (DEFUN VECTOR-TO-LIST ...) ; compiling (DEFUN LIST-TO-VECTOR ...) ; compiling (DEFMACRO AWHEN ...) ; compiling (DEFUN INTEGER-TO-STRING ...) ; compiling (DEFUN FLOAT-TO-STRING ...) ; compiling (DEFUN SATISFIES-TEST-P ...) ; compiling (DEFUN INTERLEAVE ...) ; compiling (DEFUN FIND-PACKAGE-OR-FAIL ...) ・ ・ ・ Compiling tests.lisp... Compiling tests/apply.lisp... Compiling tests/array.lisp... Compiling tests/characters.lisp... Compiling tests/conditionals.lisp... Compiling tests/control.lisp... Compiling tests/defun.lisp... Compiling tests/equal.lisp... Compiling tests/eval.lisp... Compiling tests/ffi.lisp... Compiling tests/format.lisp... Compiling tests/hash-tables.lisp... Compiling tests/iter-macros.lisp... Compiling tests/list.lisp... Compiling tests/misc.lisp... Compiling tests/numbers.lisp... Compiling tests/package.lisp... Compiling tests/print.lisp... Compiling tests/read.lisp... Compiling tests/seq.lisp... Compiling tests/setf.lisp... Compiling tests/strings.lisp... Compiling tests/variables.lisp... Compiling tests/loop/validate.lisp... Compiling tests/loop/base-tests.lisp... Compiling tests-report.lisp... Compiling repl-web/repl.lisp... Compiling repl-node/repl.lisp... NIL

私自身、内部の動作がしっかりわかっていないので、
昨日のshiroさんの分析は勉強になりました。
twitterでもよろしくお願いします。

投稿2018/06/02 22:05

t-cool

総合スコア71

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KSwordOfHaste

2018/06/02 22:34

自分が挙げたcaveman-jsclのようなアプリはこうやって作られたものなのですね・・・ 質問者さんが困っておられたのはt-coolさんがやっておられる手順の方だと思います。 ちなみにquicklispの導入などなどは不要でjsclを普通にloadすればよいのですね・・・ ドンチンカンなコメントしてしまったようです。 情報ありがとうございます。>t-coolさん すみませんでした。>質問者さん
t-cool

2018/06/02 23:37

KSwordOfHasteさん 私は内部の実装までは把握できていませんが、恐縮ながら回答させていただきました。 KSwordOfHasteさんはcaveman-jsclなどのプロジェクトを紹介されていて、次に繋がるご回答かと思います。
guest

0

もっと詳しい方がちゃんとしたコメントを付けてくれたらよいのですが・・・
(のっけからこんなことしか言えません><)

おもしろそうに感じたのでclisp使って試そうとしたのですがlispのモジュールローディング自体の知識が絶望てき(asdfとかquicklispちょっとさわってみたことしかない)でした。こういう場合は先人のトライを見てみたいところです。

「jscl 使い方」で探すと
http://peccu.hatenablog.com/entry/2016/12/13/080000
こういう記事が見つかりました。ご本人も「まだよくわからないところがある」とおっしゃってますが、紹介されてる方法はちょっと面白くて、html上にJavaScriptの参照を書いておくとサーバー側で対応するjsファイルがなければ同名のlispファイルをコンパイルしてそれを応答してくれるというものを構築されたようです。
https://github.com/peccu/caveman-jscl

自分は試してないのですがこのあたりトライしてみてはいかがでしょう?
なお、記事には「sbcl/1.3.11だとうまくいかなかったのでsbcl/1.3.9使った」とか色々苦労しておられます。質問者さんの環境はSBCL 1.4.8のようですがはたしてこのバージョンですんなりいくものかどうか・・・自分にはわかりません><

投稿2018/06/01 04:54

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問