Stackylogic ben o take oluşan bir mantık tabanlı programlama dilidir 0'ler ve 1giriş için' ler ve tek çıkışı 0veya 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, 1ya 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 bir0veya a1isteyin 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
0veya1) çı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 1kez ?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 1imleç 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 0için ?imleci yukarı hareket edecek demektir:
1
1<
0
Yine, a 1imleç 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 1ve program sona erer.
Bunun nedeni NAND geçidi için doğrudur 1 NAND 0olduğ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 1bunun sadece girilen çıktıyı verdiğini görmek kolaydır .
Bir girişi için 00diğer taraftan, imleç programı biten ve son çıkışı, üstündeki örtük boş yığınına yolunda yapacak 0girdi 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 0veya 1.
Upon ?'s, bir kullanıcıdan isteyebilir 0veya 1giriş, ya önceden belirlenmiş bir dizesinden değerini okumak 0' ler ve 1ayrı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\?