14
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

純粋関数型プログラミング言語spinozaに惚れて

[ ここに Baruch De Spinoza の肖像画が載る ]

純粋関数型プログラミング言語spinozaに惚れて

先日、皆のアイドルであるところのkenokabeさんがQiitaから追放されてしまいました。
kenokabeさんは、Qiita上で良質のポエムを投稿する、実力派ITポエマーで、私はそんな彼の大ファンでした。
彼が追放されてしまった今、彼の新作を見る事はできません。

彼の生産物をもっと見たいのに、もうそれは叶わない願いになってしまった……そんなやりきれない気持ちをどうにかするために、彼が最期に遺した""純粋関数型""プログラミング言語spinozaの一部をAPLで実装しました。

APLはIBM Mainframeとかで使われていた配列指向言語です。
spinozaでは、『【値】を明示的に【集合】として取り扱うには「配列」データ型で表現』するため、配列を中心に回るAPLと親和性が高いことでしょう。

実装上の制限

  • 値は数字か関数しか取れない。( Stringは存在しない。 )
  • 関数名はシングルクォーテーションで囲む必要がある。
  • GNU APL に依存している

実装

spinoza.apl
∇Spinoza ;R
'===== spinoza ====='
→((';'≢¯1↑R)∧'world = $'≢9↑R←⍞)/7
→((⍴R)=⍴⍕R←⍎¯1↓9↓R)/5
R←⌽R
R←⍎⍕R
→2
'===== APL ====='⍫
∇R←out X
→((⍴X)=⍴⍕X)/3
X←⌽X
R←⎕←' > ',X⍫

使用例

testcases
Coding$ apl --script -f hoge.apl
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
* Spinoza<CR> to enter Spinoza interpreter. *
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
∇R←APL
R←'APL'⍫ 
∇R←Hello x
R←'Hello, ',x⍫
∇R←plus10 x
R←x+10⍫
Spinoza
===== spinoza =====
world = $(1);
world = $(1)('out');
 >  1
world = $(1)(2)(3);
world = $(1)(2)(3)('out');
 >  1 2 3
world = $(1)('plus10');
world = $(1)('plus10')('out');
 >  11
world = $(1)(2)(3)('plus10');
world = $(1)(2)(3)('plus10')('out');
 >  11 12 13
world = $('APL');
world = $('APL')('out');
 > APL
world = $('APL')('Hello');
world = $('APL')('Hello')('out');
 > Hello, APL
world = $(9)('⍳')('/')('+');
world = $(9)('⍳')('/')('+')('out');
 >  45

===== APL =====
)OFF

Coding$

最後に

この実装は不完全です。
このままでは、spinozaは、圏論の概念もクソもない、Lispを分かりづらくしただけのようなクソ言語に成り下ってしまいます。
そこで、この実装を完全なものにすることを読者への課題とします。

別の人による実装を通して、彼の遺した言語の"""素晴しさ"""が少しでも伝われば幸いです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
14
Help us understand the problem. What are the problem?