Mathematica, 248 222 ไบต์
แก้ไข:แก้ไขการใช้งานของฟังก์ชั่นที่เกี่ยวข้องกับนายก แต่ยังปรับปรุง quining บิต
แก้ไข:ขอบคุณ Dennis ที่แนะนำให้ฉันรู้จักกับทฤษฎีบทของ Wilson
1;n=If[ValueQ@n,n+1,1];StringJoin@Array[#<>ToString[1##,InputForm]<>#2&@@\("1;n=If[ValueQ@n,n+1,1];StringJoin@Array[#<>ToString[1##,InputForm]<>#\2&@@("*"&,For[i=n,Mod[++i!/i+1,i]>0,0];i]")&,For[i=n,Mod[++i!/i+1,i]>0,0];i]
สิ่งนี้จะถือว่าเคอร์เนลถูกปิดระหว่างการเรียกใช้ quine ในภายหลัง (หรืออย่างน้อยnจะถูกรีเซ็ต) เนื่องจากอาศัยnการไม่ได้กำหนดก่อนที่อินสแตนซ์แรกของการ[MyQuine]รัน
สิ่งนี้อาจสั้นลงได้มาก แต่ฉันไม่ได้มีประสบการณ์มากมายกับควินส์โดยเฉพาะอย่างยิ่งใน Mathematica
นี่คือคำอธิบาย:
1;
สิ่งนี้ไม่ได้ทำอะไรเลย แต่ถ้าต่อกันกับจุดสิ้นสุดของควินินก่อนหน้ามันจะทวีคูณผลลัพธ์ของการแสดงออกครั้งสุดท้ายโดย1(ซึ่งไม่ใช่ -op) และเครื่องหมายอัฒภาคจะหยุดเอาต์พุต สิ่งนี้ช่วยให้มั่นใจได้ว่าจะมีเฉพาะสำเนาสุดท้ายของการ[MyQuine]พิมพ์สิ่งใด
n=If[ValueQ@n,n+1,1];
การเริ่มต้นนี้nจะ1อยู่ในสำเนาแรกของ[MyQuine]และจากนั้นเพิ่มขึ้นโดย1ในแต่ละสำเนาเพิ่มเติม - นั่นเป็นเพียงการนับจำนวนสำเนาที่มีสิ่งnต่อไปนี้
ข้ามไปยังจุดสิ้นสุดทันที:
For[i=n,Mod[++i!/i+1,i]>0,0];i
นี้พบนายกถัดไปโดยใช้ทฤษฎีบทของวิลสัน
StringJoin@Array[#<>ToString[1##,InputForm]<>#2&@@\("QUINE_PREFIX"*"QUINE_SUFFIX")&,NEXTPRIME[n]]
นี่คือควินจริง มันสร้างNextPrime@nสำเนาของรหัสเอง มันก็แปลก ๆ เหมือนกัน ใช่ฉันกำลังคูณสองสายตรงนั้นและไม่มีที่ไม่มีผลลัพธ์ที่มีความหมาย QUINE_PREFIXมีรหัสทั้งหมดก่อนหน้าสองสายและQUINE_SUFFIXมีรหัสทั้งหมดหลังจากสองสาย ตอนนี้คุณมักจะใช้Apply(หรือ@@) เพื่อเปลี่ยนรายการเป็นชุดของอาร์กิวเมนต์ แต่คุณสามารถแทนที่Headด้วยApply- เช่นการคูณ ดังนั้นแม้จะเป็นผลิตภัณฑ์ฉันยังสามารถเปลี่ยนเป็นสองอาร์กิวเมนต์ในการทำงานของฉัน ฟังก์ชั่นนั้นทำ:
#<>ToString[1##,InputForm]<>#2
โดย#ที่อาร์กิวเมนต์แรก (สตริงคำนำหน้า) #2คืออาร์กิวเมนต์ที่สอง (สตริงคำต่อท้าย) ##เป็นลำดับของอาร์กิวเมนต์ทั้งสอง ฉันจำเป็นต้องเพิ่ม1เพื่อรักษาคูณ - มิฉะนั้นจะแดงลงในรายการอาร์กิวเมนต์## ToStringอย่างไรก็ตามToString[1##,InputForm]&@@("abc"*"def")กลับมา"abc"*"def"... สิ่งที่ฉันต้องการ!
ฉันคิดว่าทุกสิ่งที่ฉันต้องการเกี่ยวกับควินินควินินแบบevalอิงจะเหมาะสมกว่าที่นี่ ฉันจะตรวจสอบในภายหลังหรือพรุ่งนี้