Stackylogic ben o take oluşan bir mantık tabanlı programlama dilidir 0
'ler ve 1
giriş için' ler ve tek çıkışı 0
veya 1
üzerine tamamlanmasını.
Bir Stackylogic programı sadece üç karakter içerebilir hatları oluşur 01?
zamanda tam bir şekilde <
hatlarının birinin sonunda. Çizgiler boş olmayabilir ve hattı <
en az birine sahip olması gerekir 0
, 1
ya da ?
ondan önce.
İşte (açıklayacağım gibi) iki bitin NAND değerini hesaplayan örnek bir program :
1
?<
11
?
0
Stackylogic programındaki her satır , altta solda ve sağda sağda bir yığın olarak kabul edilir . Örtülü, programdaki ilk satırdan önce ve son satırdan sonra boş bir yığın var.
<
Biz diyeceğiz ki imleci bir Stackylogic program çalıştırıldığında, işaretler yığın günü başlayacak. Stackylogic programının yürütülmesi şu şekilde devam eder:
İmlecin gösterdiği yığından en üstteki karakteri çıkar.
- Karakter ise
?
, kullanıcıdan bir0
veya a1
isteyin ve karaktermiş gibi davranın. - Karakter ise
0
, imleci bir yığın yukarı (geçerli çizginin üstündeki satıra) hareket ettirin. - Karakter ise
1
, imleci bir yığın aşağı (geçerli çizginin altındaki satıra) getirin.
- Karakter ise
İmleç boşa hareket ederse, yığıntan çıkan son değeri (her zaman a
0
veya1
) çıkartın ve programı sonlandırın.Aksi takdirde, imleç hareket ettiği yığın boş değilse, 1. adıma geri dönün ve işlemi tekrarlayın.
Stackylogic programlarının her zaman sona erdiğine dikkat edin, çünkü sonunda yığınlarını tüketmeleri gerekir.
NAND Örneği
NAND programında imleç a ile başlar ?
:
1
?<
11
?
0
Bir 1
kez ?
açıldığında kullanıcı girişlerini varsayacağız , yani imleç aşağı hareket eder, böylece program şöyle görünür:
1
11<
?
0
Şimdi 1
imleç yığınının en üstünde bir düz var. Usulüne uygun şekilde fırlatılır ve imleç tekrar hareket eder:
1
1
?<
0
Şimdi kullanıcı girişlerini varsayalım 0
için ?
imleci yukarı hareket edecek demektir:
1
1<
0
Yine, a 1
imleç yığınının üzerindedir, böylece imleç açılır ve aşağı hareket eder:
1
<
0
Sonunda imleç yığını boştur, bu nedenle en son açılan değer,, çıkılır 1
ve program sona erer.
Bunun nedeni NAND geçidi için doğrudur 1 NAND 0
olduğunu 1
. Elbette, kontrol etmek istiyorsanız diğer iki iki bitli girişler için çalışır.
VEYA Örnek
Bu Stackylogic programı bir OR kapısını simüle eder :
?
?<
Bir ilk girişin 1
, imleci son satırın altındaki örtük boş yığına iterek, programı sonlandırarak ve 1
bunun sadece girilen çıktıyı verdiğini görmek kolaydır .
Bir girişi için 00
diğer taraftan, imleç programı biten ve son çıkışı, üstündeki örtük boş yığınına yolunda yapacak 0
girdi olmak.
Meydan okuma
Baskı veya sonuçlanımını dönen, bir dize olarak bir Stackylogic programında alır ve onu çalıştıran bir program veya fonksiyon yazın 0
veya 1
.
Upon ?
's, bir kullanıcıdan isteyebilir 0
veya 1
giriş, ya önceden belirlenmiş bir dizesinden değerini okumak 0
' ler ve 1
ayrıca girdi olarak alması 'ın. (Bu, programınıza / işlevinize başka bir dize girişi olabilir veya yalnızca program dizesinin ilk veya son satırının girdi akışı olacağını varsayabilirsiniz).
Programın ve girişin her zaman iyi oluşturulduğunu varsayabilirsiniz. İsteğe bağlı olarak, girdi programlarının tek bir izleyen yeni satır ile geldiğini varsayabilirsiniz (sonunda her zaman gizli bir yığın olduğunu unutmayın).
Bayt cinsinden en kısa kod kazanır.
Diğer Örnek Programlar
ZERO
0<
ONE
1<
BUFFER
?<
NOT
1
?<
0
AND
?<
?
NAND
1
?<
11
?
0
OR
?
?<
NOR
1
?
00
?<
0
XOR(v1)
?
0
1?<
?
0
XOR(v2)
?
?<
11
?
0
XNOR(v1)
1
?
0?<
1
?
XNOR(v2)
1
?
00
?<
?
MEDIAN(v1)
1
???<
0
MEDIAN(v2)
?
1?<
??
Medyan programlar için teşekkürler Martin .
1\???<\0
.
111\???????<\000
.
?\1?<\??
. Alternatif olarak, işte simetrik 5 hatlı bir uygulama:?\?0\?<\?1\?