เคล็ดลับการตีกอล์ฟใน Lisp


9

เคล็ดลับทั่วไปสำหรับการเล่นกอล์ฟใน Lisp (ภาษาถิ่นใด ๆ ) คืออะไร? โปรดโพสต์หนึ่งคำตอบต่อคำตอบและมีเพียงคำตอบเฉพาะสำหรับภาษาของ Lisp (เช่น "ลบความคิดเห็น" ไม่ใช่คำตอบ)

กรุณาโพสต์ภาษาของเสียงกระเพื่อมปลายของคุณใช้กับปลายของคุณ



1
คุณคิดว่าสิ่งเหล่านี้จะแตกต่างจากเคล็ดลับสำหรับการเล่นกอล์ฟใน Scheme และ Racketหรือไม่?
Alex A.

1
ฉันอยากจะแนะนำให้ใช้ tinylisp Lisp รุ่นเล็กลงที่ถอดออกได้เพื่อความเพลิดเพลินในการเล่นกอล์ฟของคุณ
ckjbgames

คำตอบ:


4

สั่งซื้อฟังก์ชั่นพารามิเตอร์เพื่อลดช่องว่าง

แทน

(defun f(a b)(...))
...
(f x(1+ y))

ลองสิ่งที่ชอบ

(defun f(b a)(...))
...
(f(1+ y)x)

1

พิมพ์สตริงที่ประกอบด้วยตัวพิมพ์ใหญ่ผ่านอะตอมพิมพ์

princฟังก์ชั่นใน Common เสียงกระเพื่อมเป็นระยะสั้นและจะพิมพ์วัตถุโดยไม่ต้อง Characers หลบหนี หากคุณพิมพ์สัญลักษณ์ Common LISP ที่มีซินเน็ก'symbol-nameซ์สิ่งนี้จะช่วยคุณไม่ให้ต้องใส่เครื่องหมายคำพูดในสิ่งที่คุณต้องการพิมพ์และยังสามารถบันทึกบนช่องว่างได้ โปรดทราบว่าเมื่อพิมพ์สัญลักษณ์พวกเขาจะเป็นตัวพิมพ์ใหญ่ นอกจากนี้ยังไม่ได้เพิ่มบรรทัดใหม่หรือช่องว่างดังนั้นคุณไม่จำเป็นต้องต่อกัน

ตัวอย่างเช่น,

(princ'hai)

HAIจะพิมพ์

และ

(princ'hai)(princ(read))

จะพิมพ์HAIขออินพุตและพิมพ์ออกมาเช่นหากคุณพิมพ์ hello ผลลัพธ์จะเป็น

HAIhellohello

1

ใช้1+และ1-สำหรับการเพิ่มและลด

แทนที่จะ(+ a 1)หรือ(- b 1)ลองหรือ(1+ a)(1- b)


ฉันไม่เข้าใจสิ่งนี้ ไม่ได้1+แยกวิเคราะห์เป็นสองโทเค็น1และ+ใช่ไหม +1ฉันคิดว่ามันเป็น
แยกผลไม้

@ Challenger5 1+และ1-มีการแยกวิเคราะห์เป็นโทเค็นเดียวCommon Lisp HyperSpec Function 1+, 1-
Ceilingcat

ฉันคิดว่าชื่อไม่สามารถเริ่มด้วยหลัก?
แยกผลไม้

@EsolangingFruit นี่คือเสียงกระเพื่อม ...
เท่านั้น

1

ใช้loopและformatซึ่งเป็นเช่นเดียวprintfกับเตียรอยด์ formatรวมถึงการทำซ้ำและเงื่อนไขเช่นเดียวกับตัวเลขโรมันตัวเลขภาษาอังกฤษและพหูพจน์ภาษาอังกฤษ มันน่าเกลียดมากและกะทัดรัดมาก


1

เอาท์พุทตามเงื่อนไข

GNU Common LISP

~v^

ขึ้นและออกคำสั่ง~^เป็นที่นิยมใช้มากที่สุดในรายชื่อการจัดรูปแบบการดำเนินงานที่จะยุติหลังจากที่รายการสุดท้าย อย่างไรก็ตามมันสามารถใช้ร่วมกับโมดิvฟายเออร์เพื่อกินอาร์กิวเมนต์ซึ่งในกรณีนี้มันจะยุติหากอาร์กิวเมนต์นั้นเป็นศูนย์ dotimesนี้จะเป็นประโยชน์อย่างยิ่งสำหรับการติดต่อกับศูนย์ที่ผลิตโดย

(loop as n from 1 to 10 do(format t"~d~%"n))

(dotimes(n 11)(if(> n 0)(format t"~d~%"n)))

(dotimes(n 11)(format t"~v^~d~%"n n))

format(condition)

อาร์กิวเมนต์แรกที่จะformatสามารถเป็นหนึ่งt, nilaka ()หรือกระแส หากผ่านtมันจะส่งออกไปstdoutหากnilมันจะกลับมาส่งออกในรูปแบบที่เป็นสตริง สามารถใช้เอาต์พุตแบบมีเงื่อนไข ตัวอย่างข้างต้นสามารถเขียนสั้นพอ ๆ กับ:

(dotimes(n 11)(format(> n 0)"~d~%"n))

nilถ้าค่าเอาท์พุทค่าส่งกลับจะเป็น ด้วยเหตุนี้จึงสามารถใช้เป็นเงื่อนไขยุติการdoวนซ้ำได้:

(do((n 11))((<(decf n)1))(format t"~d~%"n))

(do((n 11))((format(>(decf n)0)"~d~%"n)))

~[...~]

ตัวจัดรูปแบบตามเงื่อนไขจะใช้อาร์กิวเมนต์และเลือกสตริงการจัดรูปแบบจากรายการตามดัชนี กรณีการใช้งานทั่วไปจะมีตัวจัดรูปแบบเริ่มต้น~:;ให้เลือกระหว่างศูนย์และไม่เป็นศูนย์

(dotimes(n 11)(format t"~v^~[~r~:;~d~]~%"n(mod n 3)n))

ตัวจัดรูปแบบตามเงื่อนไขสามารถซ้อนกันได้ซึ่งในกรณีนี้แต่ละอันจะใช้อาร์กิวเมนต์ในทางกลับกัน


~&

ในแต่ละตัวอย่างด้านบน~%ใช้ในการเปล่งบรรทัดใหม่ ในกรณีส่วนใหญ่สิ่งนี้อาจถูกแทนที่ด้วยบรรทัดใหม่ตามตัวอักษร อีกตัวเลือกหนึ่งคือการใช้งานซึ่งจะปล่อยขึ้นบรรทัดใหม่และถ้าหากเคอร์เซอร์ที่ส่งออกไม่ได้อยู่ที่จุดเริ่มต้นของบรรทัดอาคาที่~&fresh-line

ทั้งสอง~%และ~&ยังสามารถโต้แย้งด้วยการvปรับเปลี่ยนหรือเป็นค่าคงที่และจะผลิตขึ้นบรรทัดใหม่เป็นจำนวนมาก พวกเขาทั้งสองจะยอมรับข้อโต้แย้งเชิงลบอย่างมีความสุขซึ่งในกรณีนี้พวกเขาจะไม่ปล่อยอะไรเลย


อ้างอิงภายนอก

เสียงกระเพื่อมสามัญในทางปฏิบัติ
18. สูตรอาหารไม่กี่รูปแบบ

Common Lisp the Language, 2nd Edition
22.3.3 ฟอร์แมตเอาต์พุตเป็นอักขระสตรีม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.