自產生程式
自產生程式是很有趣的程式,以美國哲學家、邏輯學家威拉德.奎因(Willard Quine)命名,專指一段程式運行時,會輸出與程式碼本身一樣的結果。 有一個特殊要求是,該段程式碼必須不讀寫檔案也能做到,所以以下的Bash 程式碼不是Quine。
#!/bin/bash
# You cannot read the file from hard disk
cat $0
JavaScript例子
有不少例子都可以做到自產生程式的效果,以下是一段我寫的JavaScript,就是一 個很直接的Quine。
const quote = String.fromCharCode(96);
const codes = `const quote = String.fromCharCode(96);
const codes = {};
console.log(codes.replace("{}",quote+codes+quote));
`;
console.log(codes.replace('{}', quote + codes + quote));
箇中關鍵是因為在引號裏面不可以再放引號,因此要用String.fromCharCode(96)
去做出一個雙引號,然後最後一行的
console.log(codes.replace('{}', quote + codes + quote));
取代為原本的句子。
Python例子
Python例子縱使有更短的例子,以下是一段與上面JavaScript思路相同的程式碼。
codes = """codes = []
print(codes.replace("[]",chr(34)*3+codes+chr(34)*3,1))
"""
print(codes.replace("[]",chr(34)*3+codes+chr(34)*3,1))