「NewLisp」の版間の差分

提供:GizmoLabs - だいたい CAD LISP なサイト
編集の要約なし
 
(同じ利用者による、間の20版が非表示)
1行目: 1行目:
{{NewLISP}} [[Category:newLISP]]
newLISP は、Lutz Mueller 氏が開発している LISPライクな汎用スクリプト言語です。
newLISP は、Lutz Mueller 氏が開発している LISPライクな汎用スクリプト言語です。


ちょっと使い込んでみようかなということで、ここは私的なメモとして公開しています。
 
 
* [[newLisp関数一覧]]
* [[guiserver.lsp]]


==Windows で使う場合==
==Windows で使う場合==
18行目: 22行目:
* 新リスプな日々 Johu's さんのブログ (日本語) : http://johu02.wordpress.com/
* 新リスプな日々 Johu's さんのブログ (日本語) : http://johu02.wordpress.com/
* 舌足らずなブログ : [http://lisperblog.blogspot.com/2010/02/newlisp.html newLISP基礎文法最速マスター]
* 舌足らずなブログ : [http://lisperblog.blogspot.com/2010/02/newlisp.html newLISP基礎文法最速マスター]
* 紫藤のwiki(日本語) : http://sites.google.com/site/shidoinfo/Home/programing-lang/%E9%96%A2%E6%95%B0%E5%9E%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E/lisp/%E6%A7%98%E3%80%85%E3%81%AAlisp%E6%96%B9%E8%A8%80/newlisp
* newLISP ファンクラブフォーラム (英語) : http://newlispfanclub.alh.net/
* newLISP ファンクラブフォーラム (英語) : http://newlispfanclub.alh.net/
* unbalanced-parentheses (英語) : http://unbalanced-parentheses.nfshost.com/
* neglookさんのShell Games (色々と動画があります) : http://www.neglook.com/index.cgi?page=Shell_Games
* (archive 'newLISPer) : http://newlisper.wordpress.com (parentheses.nfshost.com のアーカイブだそうです。更新されてないけど有益な情報かもしれません。)
* Dragonfly (newLISP なweb framework だそうです) :
https://github.com/taoeffect/dragonfly-newlisp
 


== 基本的なところ ==
== 基本的なところ ==
 
<div class="mcol2">
* コメントは ";" か "#" を利用可能。複数行のコメントはない。
* コメントは ";" か "#" を利用可能。複数行のコメントはない。
* リスト、シンボル、lambda、式 があるよ。
* リスト、シンボル、lambda、式 があるよ。
36行目: 43行目:
  (list 'a 'b)
  (list 'a 'b)
  > (a b)
  > (a b)
* car, cdr はないよ。代わりに first(≒ car)、rest(≒ cdr)


* シンボルの例
* シンボルの例
47行目: 56行目:
  (set 'f (lambda (n) (+ n n)))
  (set 'f (lambda (n) (+ n n)))
  => (lambda (n) (+ n n))
  => (lambda (n) (+ n n))
** fn はlambdaの代わりに使えるよ
* fn はlambdaの代わりに使えるよ
  (set 'f (fn (n) (+ n n)))
  (set 'f (fn (n) (+ n n)))
  => (fn (n) (+ n n))
  => (fn (n) (+ n n))
** lambda はシンボルじゃなくて、特別なリスト扱い
* lambda はシンボルじゃなくて、特別なリスト扱い
  (length (lambda (n) (+ n n)))
  (length (lambda (n) (+ n n)))
  > 2
  > 2
  (first (lambda (n) (+ n n)))
  (first (lambda (n) (+ n n)))
  > (n)
  > (n)
** lambda 式は無名関数として使われるよね
* lambda 式は無名関数として使われるよね
  (apply (lambda (n) (+ n n) '(123))
  (apply (lambda (n) (+ n n) '(123))
  > 246
  > 246
  (map (lambda (n) (+ n n) '(1 2 3))
  (map (lambda (n) (+ n n) '(1 2 3))
  > (2 4 6)
  > (2 4 6)
** シンボルに lambda 式を定義して関数として使えるよね
* シンボルに lambda 式を定義して関数として使えるよね
  (set 'double (lambda (n) (+ n n))
  (set 'double (lambda (n) (+ n n))
  > (lambda (n) (+ n n)
  > (lambda (n) (+ n n)
  (double 123)
  (double 123)
  > 246
  > 246
** もうちょっと短かく
* もうちょっと短かく
  (define (doudle n) (+ n n))
  (define (doudle n) (+ n n))
  > (lambda (n) (+ n n)
  > (lambda (n) (+ n n)
  (double 123)
  (double 123)
  > 246
  > 246
</div>


==真・偽==
==真・偽==
* 真になるもの: 偽になるもの以外。 0や"" 空文字も真。
* 真になるもの: 偽になるもの以外。 0や"" 空文字も真。
* 偽になるもの: nil、() 空リスト。
* 偽になるもの: nil、() 空リスト。


==シンボルと関数の命名規則==
==シンボルと関数の命名規則==
91行目: 103行目:
  [俺]
  [俺]
  *111*
  *111*


==日本語==
==日本語==
102行目: 115行目:
  (utf8len "おれはジャイアン")
  (utf8len "おれはジャイアン")
  > 8
  > 8
* UTF-8 対応バージョンは、別配布なので別途DLして差し替えて使う。
; utf8じゃない長さだと
(length "おれはジャイアン")
>24
* UTF-8 対応バージョンは、別配布なので別途DLして差し替えて(あるいはUTF-8用でインストールして)使う。

2024年5月27日 (月) 22:25時点における最新版

newLISP は、Lutz Mueller 氏が開発している LISPライクな汎用スクリプト言語です。


Windows で使う場合

Windoows用のインストーラからインストールすると、newLISP のIDE用のアイコンが出来るのでそこから使ってもいいし、コマンドプロンプトで newlisp と入力して実行してもいい。 コマンドプロンプトからの利用で、複数行の記述をしたい場合は、

[cmd] 
(set 'a "a" 'b "bbb")
(+ 1 2 3)
[/cmd]

といった風に [cmd] [/cmd] で挟んで記述する。 newLISP のIDEを使う場合、上がエディタ(コード)で下がプロンプトになる。[ALT]+R でコードを実行する。

情報源など

https://github.com/taoeffect/dragonfly-newlisp


基本的なところ

  • コメントは ";" か "#" を利用可能。複数行のコメントはない。
  • リスト、シンボル、lambda、式 があるよ。
  • リストの例
    • '() … 空リスト
    • '(3) … 整数
    • '("こんにちは" "三河屋です") … 文字列2つのリスト
    • '("こんにちは" 2 opt) … 文字列と整数とシンボルのリスト
    • '((a b c) (1 2 3)) … リスト2つのリスト
    • '("こんにちは" "三河屋です") … 文字列2つのリスト
    • ドット対はないよ
(list 'a 'b)
> (a b)
  • car, cdr はないよ。代わりに first(≒ car)、rest(≒ cdr)


  • シンボルの例
    • (set 'text "こんちは") … シンボルに値を割り当て
    • text → "こんちは" … シンボルを評価すると"こんちは"
    • mirrorman → nil … 未定義のシンボルを評価すると nil
    • (set 'opt1 true 'opt2 nil) … opt1をtrue、opt2 を nil に。
    • true → true … true の評価は true (ブーリアンの true)
    • nil → nil … nil の評価は nil (ブーリアンの false)
  • lambda 式 … あるよ
(set 'f (lambda (n) (+ n n)))
=> (lambda (n) (+ n n))
  • fn はlambdaの代わりに使えるよ
(set 'f (fn (n) (+ n n)))
=> (fn (n) (+ n n))
  • lambda はシンボルじゃなくて、特別なリスト扱い
(length (lambda (n) (+ n n)))
> 2
(first (lambda (n) (+ n n)))
> (n)
  • lambda 式は無名関数として使われるよね
(apply (lambda (n) (+ n n) '(123))
> 246
(map (lambda (n) (+ n n) '(1 2 3))
> (2 4 6)
  • シンボルに lambda 式を定義して関数として使えるよね
(set 'double (lambda (n) (+ n n))
> (lambda (n) (+ n n)
(double 123)
> 246
  • もうちょっと短かく
(define (doudle n) (+ n n))
> (lambda (n) (+ n n)
(double 123)
> 246


真・偽

  • 真になるもの: 偽になるもの以外。 0や"" 空文字も真。
  • 偽になるもの: nil、() 空リスト。


シンボルと関数の命名規則

  1. 変数シンボルは、次の文字から始まってはならない:
    • # ; " ' ( ) { } . , 0 1 2 3 4 5 6 7 8 9
  2. + または - で始まる変数シンボルは、二文字目に数字を使うことはできない。
  3. 変数名の内部には、以下の文字を除く、どんな文字も許される:
    • " ' ( ) : , 半角スペース
    • これらは、変数シンボルの終りを意味する。
  4. [(左角括弧)で始まり、](右角括弧)で終わるシンボルは、右角括弧を除くどんな文字を含んでもよい。
  • newLISP では適正なシンボル名の例
myvar
A-name
X34-zz
[* 7 5 ()};]
[俺]
*111*


日本語

  • set-locale で現在のロケールを調べたり、変えられたりする。日本の場合、小数点の記号は標準と一緒の"."。
(set-locale "JPN")
> ("Japanese_Japan.932" ".")
(set-locale "DEU")
> ("German_Germany.1252" ",")
  • newLISP の UTF-8 対応バージョンにするとUTF8関連の関数が使える。
以下、例
(utf8len "おれはジャイアン")
> 8

; utf8じゃない長さだと
(length "おれはジャイアン")
>24
  • UTF-8 対応バージョンは、別配布なので別途DLして差し替えて(あるいはUTF-8用でインストールして)使う。