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
อิงจะเหมาะสมกว่าที่นี่ ฉันจะตรวจสอบในภายหลังหรือพรุ่งนี้