Skip to content

Latest commit

 

History

History
359 lines (306 loc) · 6.96 KB

README-ja.md

File metadata and controls

359 lines (306 loc) · 6.96 KB

N-Prolog

N-Prolog(NPL)はARITY/PROLOG(MS-DOS)互換のインタプリタ、コンパイラです。

N-PrologはISO-Prolog互換ではありません.ARITY/PROLOG(MS-DOS)互換です。

manual.txtにユーザーズマニュアルがあります。ご参照ください。 ライセンスは修正BSDに基づいています。無償でお使いいただけます。

npl

脆弱性のお知らせ

ver3.22のリリースでは、N-Prologの以前のバージョンで特定された重要な脆弱性に対処しています。全ユーザーに最新バージョンへのアップグレードを強く推奨します。これにより、アプリケーションのセキュリティと安定性が確保されます。

変更内容やこのアップデートの重要性については、リリースノートをご確認ください。

N-Prologのセキュリティ維持にご理解とご協力をいただき、ありがとうございます。

OS

下記のOSでの動作を確認しております。

  • Ubuntu
  • Linux MINT
  • RaspberryPI Raspbian
  • macOS
  • OpenBSD
  • FreeBSD

Windowsでお使いの場合にはWSLをお使いください。

インストール

homeディレクトリにおいてGithubからクローンを作るか、あるいはzipファイルをダウンロードします。 linuexの端末において"sudo make install"とタイプします。

参考 https://www.youtube.com/watch?v=36vUd8ThMF0

アンインストール

Linuxの端末において"sudo make uninstall"とタイプします。

起動

N-Prologを起動するには下記のように端末からタイプします。

npl

-c オプションはファイルを読み込んで起動します。

例
npl -c init.pl

-r オプションは編集可能REPLをOFFにして起動します。
指定しない場合にはREPLは編集可能となっています。

他のオプション

$ npl -h
List of options:
-c filename   -- NPL starts after reading the file.
-h            -- display help.
-r            -- NPL does not use editable REPL.
-s filename   -- NPL run file with script mode.
-v            -- dislplay version number.

目標

私はPrologがより多くの人に親しまれることを望んでいます。多くの人にPrologを楽しんでいただきたいと思います。 NPLは簡単な取扱を目指しています。

実行例

N-Prolog Ver 1.50
?- length([1,2,3],X).
X = 3
yes


?- X is 2^1000.
X = 107150860718626732094842504906000181056140481170553360744375038837035105112493612249319837881569585812
7594672917553146825187145285692314043598457757469857480393456777482423098542107460506237114187795418215304
6474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
yes

?- append(X,Y,[1,2,3]).
X = []
Y = [1,2,3];
X = [1]
Y = [2,3];
X = [1,2]
Y = [3];
X = [1,2,3]
Y = [];
no
?- 
?- ['tests/queens.pl'].
yes
?- test.
....
[9,7,2,4,1,8,5,3,6]
[9,7,3,8,2,5,1,6,4]
[9,7,4,2,8,6,1,3,5]
no
?- 



?- halt.
- good bye -

編集可能なREPL

キーバインディングは下記の通りです。

  • → move right
  • ← move left
  • ↑ recall history older
  • ↓ recall history newer
  • return insert end of line
  • back-space backspace
  • Esc Tab completion

ユニコード

unicodeが使用可能です。


動物(人間).
人間(ジョー).

動物(X) :- 人間(X).

?- ['tests/animal.pl'].
yes
?- 動物(ジョー).
yes
?- 動物(X).
X = 人間 .
yes

組込み述語

/+
<
=/
\=
= ..
=<
> 
>=
=:=
=\=
==
\==
@<
@=<
@>
@>=
abolish/1
abort/0
ansi_cuu/1
ansi_cud/1
ansi_cuf/1
ansi_cub/1
ansi_sgr/1
ansi_cpr/2
ansi_scp/0
ansi_rcp/0
ansi_ed/0
ansi_el/0
arg/3
arg0/3
assert/1
asserta/1
assertz/1
atom/1
atomic/1
break/0
call/1
chdir/1
clause/2
close/1
compare/3
concat/3
consult/1
ctr_set/2
ctr_dec/2
ctr_inc/2
ctr_is/2
current_op/3
current_predicate/1
date/1
date_day/2
dec/2
delete/1
directory/6
display/1
dup/2
edit/1
eq/2
erase/1
eraseall/1
expand_term/2
fail/0
float/1
float_text/3
flush/0 
gc/0
get/1
get/2
get0/1
get0/2
get0_noecho/1
halt/0
ifthen/2
ifthenelse/3
in/2
inc/2
instance/2
integer/1
is/2
keysort/2
length/2
listing/0
listing/1
mkdir/1
name/2
nl/0
nl/1
nonvar/1
nospy/1
notrace/0
number/1
not/1
out/1
open/3
read/1
read_line/2
reconsult/1
recorda/3
recordh/3
recordz/3
ref/1
reset_op/0
retrieveh/3
rmdir/1
see/1
seeing/1
seen/0
shell/1
sort/2
spy/1
string/1
string_length/2
string_term/2
syntaxerrors/2
system/1
tell/1
telling/1
told/0
time/1
trace/0
true/0
var/1
write/1
write/2
writeq/1
writeq/2

組み込み述語(拡張)

atom_concat/3
append/3
between/3
char_code/2
compile_file/1  (invoke compiler)
compound/1
ground/1
heapd/2     (dump heap area from 1st arg to 2nd arg)
member/2
measure/1   (measure elapsed time)
reverse/2 
bagof/3
setof/3
finall/3
existerrors/2

wiringPi

ラズペリーPIにおいてはwiringPiのための組み込み述語が含まれます。

N-Prolog <==================================> C
wiringpi_spi_setup(ch speed) <===> wiringPiSPISetup (SPI_CH, SPI_SPEED)
wiringpi_setup_gpio  <===> wiringPiSetupGpio()
pin_mode(n, 'output) <====> pinMode(n, OUTPUT) or 'input -> INPUT 'pwm-output -> PWM_OUTPUT
digital_write(n, v) <===> digitalWrite(n, v)
digital_write_byte(v) <===> digitalWriteByte(value)
digital_read(pin) <===> digitalRead(pin)
delay(howlong) <===> void delay(unsigned int howLong)
delay_microseconds(howlong) <===> void delay_microseconds(unsigned int howLong)
pull_up_dn_control(pin, pud) <===> pullUpDnControl(pin,pud)
pwm_set_mode('pwm_mode_ms) <===> pwmSetMode(PWM_MODE_MS); or 'pwm_mode_bal -> PWM_MODE_BAL
pwm_set_clock(n) <===> pwmSetClock(n)
pwm_set_range(n) <===> pwmSetRange(n)
pwm_write(pin, value) <===> pwmWrite(pin , value)

timer_microseconds/1
usage:  timer_microseconds(on).   timer on
        timer_microseconds(off).  timer off
        timer_microsecons(X).     unify X elapsed time. float number ,unit seconds , valid digits microsecnods
        see tests/measure.pl

関数

pi             定数 円周率
X + Y          加算
X - Y         減算
X * Y         乗算
X / Y         通常の除算 結果は浮動小数点数
X // Y        整数の除算 結果は整数。
X ^ Y          べき乗
X ** Y         べき乗
X << Y         XをYだけ左へビットシフトする。(整数のみ)
X >> Y         XをYだけ右へビットシフトする。(整数のみ)
X mod Y        XをYで割った剰余(整数のみ)
X /\ Y         論理積
X \/ Y         論理和
\X  complement
abs(X)         Xの値の絶対値
sin(X)        Xの正弦関数
asin(X)       Xの逆正弦関数
cos(X)        Xの余弦関数
acos(X)       Xの逆余弦関数
tan(X)        Xの正接関数
atan(X)       Xの逆正接関数
exp(X)       Xの指数関数
ln(X)          Xの自然対数関数
log(X)       Xの常用対数関数
sqrt(X)
round(X,N)     Xを小数点以下N桁に丸める。Nは0〜15の整数
randi(n)      n以下0以上の整数乱数
random     1以下0以上の浮動小数点数乱数