Buat bahasa dan implementasi Muriel-like

9

Muriel adalah bahasa di mana satu-satunya cara untuk mengulang adalah membuat quine dan menjalankannya. Tugas Anda adalah membuat bahasa Anda sendiri dengan properti ini dan mengimplementasikannya dalam bahasa yang sudah ada sebelumnya.

Kami akan mendefinisikan bahasa seperti Muriel seperti berikut:

  1. Ini memiliki perintah bawaan untuk mengeksekusi kode dalam bahasanya sendiri, mirip dengan @perintah Muriel atau python exec.
  2. Itu Turing lengkap.
  3. Jika Anda menghapus perintah eksekusi bawaan, Turing tidak lagi lengkap.

Muriel seperti Muriel dengan @sebagai perintah eksekusi bawaannya. Smurf juga mirip Muriel (perintah eksekusi bawaannya adalah x). Python tidak seperti Muriel, karena Turing masih lengkap jika Anda hapus exec.

Tugas Anda adalah membuat bahasa pemrograman seperti Muriel, dan kemudian menyediakannya dalam bahasa pilihan Anda. Skor Anda adalah panjang implementasi, yang Anda coba untuk meminimalkan.

Catatan:

  1. Eksekusi bawaan Anda tidak perlu berfungsi persis seperti Muriel. Terserah Anda bagaimana menangani penghentian program anak, kesalahan, pelingkupan, dll ...
  2. Bahasa yang Anda tulis pelaksanaannya tidak bisa sendiri menjadi Muriel-seperti. (Ini agar itu @bukan entri yang valid.) Itu juga harus sudah ada sebelum posting ini.
PyRulez
sumber
Apakah Underload adalah bahasa yang mirip Muriel?
alephalpha
@JerryJeremiah Apakah hasil edit saya membuatnya lebih jelas?
PyRulez
@alephalpha Wiki itu berkata "Tanpa ^, program yang tersisa akan selalu berkurang ukurannya, akhirnya terhenti." Jika ini benar, maka ya, Underload seperti Muriel.
PyRulez
Apa yang Anda lakukan jika bahasa target Anda memiliki banyak evalperintah? (Misalnya Python execdan eval) Perlu penghapusan mereka semua untuk kehilangan TCness?
CalculatorFeline
1
@PyRulez Saya pikir ini harus menjadi popularitas-kontes daripada kode-golf, karena jika tidak pilihan bahasa implementasi akan menjadikannya tantangan bunglon
Uriel

Jawaban:

3

Python 3 dan "Subset TC minimum Underload tetapi dengan karakter berubah menjadi 2019, terbalik, dan dengan 0di atas", 156 byte

c=input()
n=1
t=c
s=[]
while c:
 *c,i=c
 if n:
  if"6">i:n+=int(i)-1
  if n:t=[i]+t
  else:s+=[t];t=[]
 elif"2"==i:n=1
 elif"2">i:s+=s[-1:]
 else:c+=s.pop()

Cobalah online!

Penjelasan di header, kode komentar di footer.

CalculatorFeline
sumber
3
RIP grand chart
Uriel