เคล็ดลับทั่วไปสำหรับการเล่นกอล์ฟใน Lisp (ภาษาถิ่นใด ๆ ) คืออะไร? โปรดโพสต์หนึ่งคำตอบต่อคำตอบและมีเพียงคำตอบเฉพาะสำหรับภาษาของ Lisp (เช่น "ลบความคิดเห็น" ไม่ใช่คำตอบ)
กรุณาโพสต์ภาษาของเสียงกระเพื่อมปลายของคุณใช้กับปลายของคุณ
เคล็ดลับทั่วไปสำหรับการเล่นกอล์ฟใน Lisp (ภาษาถิ่นใด ๆ ) คืออะไร? โปรดโพสต์หนึ่งคำตอบต่อคำตอบและมีเพียงคำตอบเฉพาะสำหรับภาษาของ Lisp (เช่น "ลบความคิดเห็น" ไม่ใช่คำตอบ)
กรุณาโพสต์ภาษาของเสียงกระเพื่อมปลายของคุณใช้กับปลายของคุณ
คำตอบ:
แทน
(defun f(a b)(...))
...
(f x(1+ y))
ลองสิ่งที่ชอบ
(defun f(b a)(...))
...
(f(1+ y)x)
princ
ฟังก์ชั่นใน Common เสียงกระเพื่อมเป็นระยะสั้นและจะพิมพ์วัตถุโดยไม่ต้อง Characers หลบหนี หากคุณพิมพ์สัญลักษณ์ Common LISP ที่มีซินเน็ก'symbol-name
ซ์สิ่งนี้จะช่วยคุณไม่ให้ต้องใส่เครื่องหมายคำพูดในสิ่งที่คุณต้องการพิมพ์และยังสามารถบันทึกบนช่องว่างได้ โปรดทราบว่าเมื่อพิมพ์สัญลักษณ์พวกเขาจะเป็นตัวพิมพ์ใหญ่ นอกจากนี้ยังไม่ได้เพิ่มบรรทัดใหม่หรือช่องว่างดังนั้นคุณไม่จำเป็นต้องต่อกัน
ตัวอย่างเช่น,
(princ'hai)
HAI
จะพิมพ์
และ
(princ'hai)(princ(read))
จะพิมพ์HAI
ขออินพุตและพิมพ์ออกมาเช่นหากคุณพิมพ์ hello ผลลัพธ์จะเป็น
HAIhellohello
1+
และ1-
สำหรับการเพิ่มและลดแทนที่จะ(+ a 1)
หรือ(- b 1)
ลองหรือ(1+ a)
(1- b)
1+
แยกวิเคราะห์เป็นสองโทเค็น1
และ+
ใช่ไหม +1
ฉันคิดว่ามันเป็น
ใช้loop
และformat
ซึ่งเป็นเช่นเดียวprintf
กับเตียรอยด์ format
รวมถึงการทำซ้ำและเงื่อนไขเช่นเดียวกับตัวเลขโรมันตัวเลขภาษาอังกฤษและพหูพจน์ภาษาอังกฤษ มันน่าเกลียดมากและกะทัดรัดมาก
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
, nil
aka ()
หรือกระแส หากผ่าน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 ฟอร์แมตเอาต์พุตเป็นอักขระสตรีม