ชื่อ
expr - ประเมินนิพจน์
สรุป
expr หาเรื่อง ? อาร์กิวเมนต์ arg … ?
เชื่อม หาเรื่อง 's (การเพิ่มช่องว่างคั่นระหว่างพวกเขา), ประเมินผลเป็นนิพจน์ Tcl และส่งกลับค่า ตัวดำเนินการอนุญาตในนิพจน์ Tcl เป็นเซตย่อยของโอเปอเรเตอร์ที่ได้รับอนุญาตในนิพจน์ C และมีความหมายและความสำคัญเช่นเดียวกับตัวดำเนินการ C ที่สอดคล้องกัน นิพจน์เกือบจะให้ผลลัพธ์เป็นตัวเลข (ค่าจำนวนเต็มหรือทศนิยม) ตัวอย่างเช่นนิพจน์
expr 8.2 + 6
ประเมินเป็น 14.2 นิพจน์ Tcl จะแตกต่างจากนิพจน์ C ในลักษณะที่ระบุตัวดำเนินการ นอกจากนี้การแสดงผล Tcl สนับสนุนตัวดำเนินการที่ไม่ใช่ตัวเลขและการเปรียบเทียบสายอักขระ
ถูกดำเนินการ
การแสดงออกของ Tcl ประกอบไปด้วยตัวดำเนินการตัวดำเนินการและวงเล็บ พื้นที่สีขาวอาจถูกใช้ระหว่างตัวดำเนินการและโอเปอเรเตอร์และวงเล็บ มันไม่สนใจคำแนะนำของนิพจน์ ที่เป็นไปได้ตัวถูกดำเนินการถูกตีความว่าเป็นค่าจำนวนเต็ม ค่าจำนวนเต็มอาจระบุเป็นทศนิยม (กรณีปกติ) ในรูป octal (ถ้าอักขระตัวแรกของโอเปอแรนด์คือ0) หรือเลขฐานสิบหก (ถ้าสองตัวแรกของตัวถูกดำเนินการอยู่0x) หากโอเปอรแรนดไมมีรูปแบบจํานวนเต็มที่ระบุไวดวยขอนั้นจะถือวาเปนจํานวนจุดลอยตัวหากเปนไปได ตัวเลขทศนิยมอาจถูกระบุด้วยวิธีใดก็ได้ที่ยอมรับโดยคอมไพเลอร์ C ที่สอดคล้องกับ ANSI (ยกเว้นว่าจะใช้ฉ, F, ล., และL ต่อท้ายจะไม่ได้รับอนุญาตในการติดตั้งส่วนใหญ่) ตัวอย่างเช่นทั้งหมดต่อไปนี้เป็นตัวเลขทศนิยมที่ถูกต้อง: 2.1, 3, 6e4, 7.91e + 16 ถ้าไม่มีการตีความตัวเลขเป็นไปได้ตัวถูกดำเนินการจะถูกปล่อยให้เป็นสตริง (และสามารถใช้ตัวดำเนินการ จำกัด ได้)
Operands สามารถระบุได้ด้วยวิธีใดวิธีหนึ่งต่อไปนี้:
1
เป็นค่าตัวเลขทั้งจำนวนเต็มหรือทศนิยม
2
เป็นตัวแปร Tcl โดยใช้มาตรฐาน$ เอกสาร ค่าของตัวแปรจะถูกใช้เป็นตัวถูกดำเนินการ
3
เป็นสตริงที่อยู่ในเครื่องหมายคำพูดคู่ parser นิพจน์จะดำเนินการแทนเครื่องหมายทับขวา, ตัวแปรและคำสั่งบนข้อมูลระหว่างคำพูดและใช้ค่าผลลัพธ์เป็นตัวถูกดำเนินการ
4
เป็นสตริงที่ล้อมรอบด้วยวงเล็บปีกกา อักขระระหว่างรั้งเปิดและการจับคู่วงเล็บปีกกาใกล้จะถูกใช้เป็นตัวถูกดำเนินการโดยไม่มีการแทนใด ๆ
5
เป็นคำสั่ง Tcl ที่อยู่ในวงเล็บ คำสั่งจะถูกดำเนินการและผลของมันจะถูกใช้เป็นตัวถูกดำเนินการ
6
เป็นฟังก์ชันทางคณิตศาสตร์ที่อาร์กิวเมนต์มีรูปแบบข้างต้นสำหรับตัวดำเนินการเช่นบาป ($ x). ดูด้านล่างสำหรับรายการของฟังก์ชันที่กำหนดไว้
ในกรณีที่มีการแทนที่เกิดขึ้นด้านบน (เช่นภายในสตริงที่ยกมา) จะใช้คำแนะนำในการแสดงออก อย่างไรก็ตามอาจมีการทดแทนการทดแทนเพิ่มเติมจากตัวจำแนกคำสั่งก่อนที่จะประมวลผลตัวประมวลผลนิพจน์ ดังที่กล่าวไว้ด้านล่างนี้โดยปกติแล้วควรใส่นิพจน์ในเครื่องหมายวงเล็บเพื่อป้องกันไม่ให้ตัวแบ่งลำดับคำสั่งดำเนินการแทนเนื้อหา
สำหรับตัวอย่างของนิพจน์ง่ายๆสมมุติว่าตัวแปร มีค่า 3 และตัวแปรขมีค่า 6 แล้วคำสั่งที่ด้านซ้ายของแต่ละบรรทัดด้านล่างจะให้ค่าทางด้านขวาของบรรทัด:
expr 3.1 + $ a6.1 expr 2 + "$ a. $ b" 5.6 expr 4 * llength "6 2" 8 expr {{คำหนึ่ง} <"word $ a"} 0
ผู้ประกอบการ
โอเปอเรเตอร์ที่ถูกต้องระบุไว้ด้านล่างนี้จัดกลุ่มไว้ในลำดับความสำคัญที่ลดลง:
- + ~ !
Unary ลบ, เอกภาพ plus, bit-wise NOT, logical NOT ไม่มีตัวถูกดำเนินการเหล่านี้อาจถูกนำมาใช้กับตัวดำเนินการสตริงและบิตที่ชาญฉลาดอาจใช้เฉพาะกับจำนวนเต็มเท่านั้น
* / %
คูณหารส่วนที่เหลือ ไม่มีตัวถูกดำเนินการเหล่านี้อาจถูกนำมาใช้กับตัวดำเนินการสตริงและส่วนที่เหลืออาจใช้กับจำนวนเต็มเท่านั้น ส่วนที่เหลือจะมีเครื่องหมายเท่ากับตัวหารเสมอและค่าสัมบูรณ์น้อยกว่าตัวหาร
+ -
เพิ่มและลบ ใช้ได้กับตัวนับตัวเลขใดก็ได้
<< >>
การเลื่อนซ้ายและขวา ใช้ได้สำหรับโอเปอรริบิวจำนวนเต็มเท่านั้น การเลื่อนทางขวาจะเผยแพร่บิตลงชื่อเข้าใช้เสมอ
< > <= >=
บูลีนน้อยกว่ามากน้อยกว่าหรือเท่ากับและมากกว่าหรือเท่ากับ โอเปอเรเตอร์แต่ละตัวสร้าง 1 ถ้าเงื่อนไขเป็นจริง 0 มิฉะนั้น โอเปอเรเตอร์เหล่านี้อาจใช้กับสตริงและตัวดำเนินการตัวเลขซึ่งในกรณีนี้จะใช้การเปรียบเทียบสตริง
== !=
บูลีนเท่ากับและไม่เท่ากัน ผู้ดำเนินงานแต่ละรายสร้างผลลัพธ์เป็นศูนย์ / หนึ่งรายการ ใช้ได้กับทุกโอเปอแรนด์
&
บิตฉลาด AND ใช้ได้สำหรับโอเปอรริบิวจำนวนเต็มเท่านั้น
^
Bit-wise exclusive OR ใช้ได้สำหรับโอเปอรริบิวจำนวนเต็มเท่านั้น
|
บิตฉลาด OR ใช้ได้สำหรับโอเปอรริบิวจำนวนเต็มเท่านั้น
&&
ตรรกะ AND ผลลัพธ์ 1 ถ้าทั้งสองตัวถูกดำเนินการไม่เป็นศูนย์ 0 มิฉะนั้น ใช้ได้กับโอลเดอร์แบบบูลีนและตัวเลข (จำนวนเต็มหรือทศนิยม) เท่านั้น
||
เหตุผล OR ผลลัพธ์ 0 ถ้าทั้งสองตัวถูกดำเนินการเป็นศูนย์ 1 มิฉะนั้น ใช้ได้กับโอลเดอร์แบบบูลีนและตัวเลข (จำนวนเต็มหรือทศนิยม) เท่านั้น
x ? Y : Z
ถ้า - แล้ว - อื่นเช่นเดียวกับใน C. ถ้า x ประเมินเป็นค่าที่ไม่ใช่ศูนย์แล้วผลลัพธ์คือค่าของ Y . มิฉะนั้นผลที่ได้คือค่าของ Z . x โอเปอเรเตอร์ต้องมีค่าตัวเลข
ดูคู่มือ C สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับผลลัพธ์ที่ได้จากผู้ประกอบการแต่ละราย กลุ่มผู้ดำเนินการแบบไบนารีทั้งหมดจากซ้ายไปขวาจะอยู่ในระดับความสำคัญเดียวกัน ตัวอย่างเช่นคำสั่ง
expr 4 * 2 <7
ส่งกลับ 0
&&, ||, และ?: ผู้ประกอบการมี `` การประเมินผลขี้เกียจ '' เช่นเดียวกับใน C ซึ่งหมายความว่าตัวถูกดำเนินการไม่ได้รับการประเมินหากไม่จำเป็นต้องใช้เพื่อกำหนดผลลัพธ์ ตัวอย่างเช่นในคำสั่ง
expr {$ v? a: b}
เพียงหนึ่งในเป็น หรือb จะได้รับการประเมินขึ้นอยู่กับค่าของ$ วี. อย่างไรก็ตามโปรดทราบว่านี่เป็นจริงถ้านิพจน์ทั้งตัวอยู่ในวงเล็บปีกกา มิฉะนั้นตัวแบ่งวิเคราะห์ Tcl จะประเมินทั้งสองอย่างเป็น และb ก่อนเรียกใช้expr คำสั่ง
ฟังก์ชันคณิตศาสตร์
Tcl สนับสนุนฟังก์ชั่นทางคณิตศาสตร์ต่อไปนี้ในการแสดงออก:
เอบีเอส กระบองเข้าสู่ระบบsqrt acos สองlog10srand มิดชิด ประสบการณ์ธารสีน้ำตาล Atan ชั้นแรนด์tanh atan2 fmodรอบ ceil hypotบาป cos intSinh
เอบีเอส ( หาเรื่อง )
ส่งคืนค่าสัมบูรณ์ของ หาเรื่อง . หาเรื่อง อาจเป็นจำนวนเต็มหรือทศนิยมและผลจะถูกส่งกลับในรูปแบบเดียวกัน
acos ( หาเรื่อง )
ส่งค่าโคไซน์โคไซน์ของ หาเรื่อง ในช่วง 0, pi เรเดียน หาเรื่อง ควรอยู่ในช่วง -1,1
มิดชิด ( หาเรื่อง )
ส่งกลับอาร์คไซน์ของ หาเรื่อง , ในเรเดียนช่วง -pi / 2, pi / 2 หาเรื่อง ควรอยู่ในช่วง -1,1
Atan ( หาเรื่อง )
ส่งกลับค่าอาร์กสัมผัสของ หาเรื่อง , ในเรเดียนช่วง -pi / 2, pi / 2
atan2 ( x, y )
ส่งกลับค่าอาร์กสัมผัสของ Y / x ในช่วง -pi, pi เรเดียน x และ Y ไม่สามารถเป็น 0 ได้
ceil ( หาเรื่อง )
ส่งกลับค่าจำนวนเต็มที่เล็กที่สุดไม่น้อยกว่า หาเรื่อง .
cos ( หาเรื่อง )
ส่งค่าโคไซน์ของ หาเรื่อง วัดเป็นเรเดียน
กระบอง ( หาเรื่อง )
ส่งกลับค่าโคไซน์ไฮเปอร์โบลิกของ หาเรื่อง . หากผลที่ได้จะทำให้เกิดการล้น
คู่ ( หาเรื่อง )
ถ้า หาเรื่อง เป็นค่าลอยตัวส่งกลับ หาเรื่อง , มิฉะนั้นแปลง หาเรื่อง ให้ลอยตัวและส่งกลับค่าที่แปลงแล้ว
ประสบการณ์ ( หาเรื่อง )
ส่งกลับค่าเลขชี้กำลังของ หาเรื่อง , หมายถึง e ** หาเรื่อง . หากผลที่ได้จะทำให้เกิดการล้น
ชั้น ( หาเรื่อง )
ส่งกลับค่ารวมที่ใหญ่ที่สุดไม่เกิน หาเรื่อง .
fmod ( x, y )
ส่งคืนส่วนที่เหลือลอยตัวของส่วนของ x โดย Y . ถ้า Y เป็น 0 ข้อผิดพลาดจะถูกส่งกลับ
hypot ( x, y )
คำนวณความยาวของด้านตรงข้ามของรูปสามเหลี่ยมมุมฉากด้านขวา ( x * x + Y * Y ).
int ( หาเรื่อง )
ถ้า หาเรื่อง เป็นจำนวนเต็มค่าส่งกลับ หาเรื่อง , มิฉะนั้นแปลง หาเรื่อง เป็นจำนวนเต็มโดยการตัดทอนและส่งกลับค่าที่แปลงแล้ว
เข้าสู่ระบบ ( หาเรื่อง )
ส่งกลับค่าลอการิทึมธรรมชาติของ หาเรื่อง . หาเรื่อง ต้องเป็นค่าบวก
log10 ( หาเรื่อง )
ส่งกลับค่าลออริฐาน 10 ของ หาเรื่อง . หาเรื่อง ต้องเป็นค่าบวก
ธาร ( x, y )
คำนวณค่าของ x ยกขึ้นเพื่ออำนาจ Y . ถ้า x เป็นลบ, Y ต้องเป็นค่าจำนวนเต็ม
แรนด์ ()
แสดงจำนวนจุดลอยจากศูนย์เป็นเพียงน้อยกว่าหนึ่งหรือในเทอมเชิงคณิตศาสตร์ช่วง 0,1) เมล็ดมาจากนาฬิกาภายในของเครื่องหรืออาจจะตั้งค่าด้วยตนเองด้วยฟังก์ชัน srand
รอบ( หาเรื่อง )
ถ้า หาเรื่อง เป็นจำนวนเต็มค่าส่งกลับ หาเรื่อง , มิฉะนั้นแปลง หาเรื่อง เป็นจำนวนเต็มโดยการปัดเศษและส่งกลับค่าที่แปลงแล้ว
บาป( หาเรื่อง )
ส่งกลับไซน์ของ หาเรื่อง วัดเป็นเรเดียน
Sinh ( หาเรื่อง )
ส่งกลับค่าไฮเปอร์โบลิกไซน์ของ หาเรื่อง . หากผลที่ได้จะทำให้เกิดการล้น
sqrt ( หาเรื่อง )
แสดงรากที่สองของ หาเรื่อง . หาเรื่อง ต้องไม่ใช่เชิงลบ
srand ( หาเรื่อง )
หาเรื่อง ซึ่งจะต้องเป็นจำนวนเต็มจะถูกใช้เพื่อตั้งค่าเมล็ดสำหรับเครื่องกำเนิดตัวเลขแบบสุ่ม ส่งกลับหมายเลขสุ่มแรกจากเมล็ดพันธุ์นั้น ล่ามแต่ละคนมีเมล็ดของตัวเอง
สีน้ำตาล ( หาเรื่อง )
ส่งกลับค่าสัมผัสกันของ หาเรื่อง วัดเป็นเรเดียน
tanh ( หาเรื่อง )
ส่งกลับค่าการติดต่อกันเกินความจริงของ หาเรื่อง .
นอกจากฟังก์ชันที่กำหนดไว้ล่วงหน้าแล้วแอ็พพลิเคชันอาจกำหนดฟังก์ชันเพิ่มเติมโดยใช้Tcl_CreateMathFunc().
ประเภทล้นและความแม่นยำ
การคำนวณภายในทั้งหมดที่เกี่ยวข้องกับจำนวนเต็มจะกระทำกับประเภท C ยาว และการคํานวณภายในทั้งหมดที่เกี่ยวของกับจุดลอยตัวจะทําดวยชนิด C สอง . เมื่อแปลงสตริงเป็นจุดลอยตัวจะมีการตรวจพบการล้นล้นอันเป็นลําดับและทำให้เกิดข้อผิดพลาด Tcl สำหรับการแปลงเป็นจำนวนเต็มจากสตริงการตรวจจับการทั่งล้นจะขึ้นอยู่กับพฤติกรรมของกิจวัตรในไลบรารี C ในเครื่องดังนั้นจึงควรถือว่าไม่น่าเชื่อถือ ไม่ว่าในกรณีใด ๆ จำนวนเต็ม overflow และ underflow โดยทั่วไปจะไม่สามารถตรวจจับได้อย่างน่าเชื่อถือสำหรับผลลัพธ์ระดับกลาง การตรวจจับระดับล้นและจุดต่ำสุดที่ลอยตัวอยู่ในระดับที่ฮาร์ดแวร์สนับสนุนซึ่งโดยทั่วไปน่าเชื่อถือมาก
การแปลงค่าระหว่างการแทนภายในสำหรับตัวดำเนินการจำนวนเต็มทศนิยมและสตริงจะดำเนินการโดยอัตโนมัติตามที่ต้องการ สำหรับการคำนวณทางคณิตศาสตร์จำนวนเต็มจะถูกใช้จนกว่าจะมีการใช้ตัวเลขลอยตัวบางจุดหลังจากที่ใช้จุดลอยตัวแล้ว ตัวอย่างเช่น,
expr 5/4
ส่งกลับ 1 ขณะ
expr 5 / 4.0 expr 5 / (string length "abcd" + 0.0)
ทั้งสองกลับ 1.25 ค่า Floating-point จะถูกส่งกลับเสมอด้วย ``.'หรือ aอี เพื่อให้พวกเขาจะไม่เหมือนค่าจำนวนเต็ม ตัวอย่างเช่น,
expr 20.0 / 5.0
ผลตอบแทน4.0ไม่ใช่4.
การดำเนินการของสตริง
ค่าสตริงอาจใช้เป็นโอเปอเรเตอร์ของโอเปอเรเตอร์การเปรียบเทียบแม้ว่าผู้ประเมินนิพจน์จะพยายามทำเปรียบเทียบเป็นจำนวนเต็มหรือทศนิยมเมื่อทำได้ ถ้าตัวดำเนินการหนึ่งของการเปรียบเทียบเป็นสตริงและอีกตัวหนึ่งมีค่าตัวเลขโอเปอเรเตอร์ตัวเลขจะถูกแปลงเป็นสตริงโดยใช้ C sprintf ตัวระบุรูปแบบ% d สำหรับ integers และ% g สำหรับค่าจุดลอยตัว ตัวอย่างเช่นคำสั่ง
expr {"0x03"> "2"} expr {"0y" <"0x12"}
ทั้งสองกลับ 1 การเปรียบเทียบแรกจะทำโดยใช้การเปรียบเทียบจำนวนเต็มและที่สองจะทำโดยใช้การเปรียบเทียบสตริงหลังจากที่ตัวถูกดำเนินการที่สองถูกแปลงเป็นสตริง18. เนื่องจาก Tcl มีแนวโน้มที่จะถือว่าค่าเป็นตัวเลขเมื่อทำได้อย่าใช้โอเปอเรเตอร์อย่างเช่น==เมื่อคุณต้องการสตริงเปรียบเทียบและค่าของตัวถูกดำเนินการอาจจะ arbitrary; ในกรณีเหล่านี้จะดีกว่าในการใช้เชือก คำสั่งแทน
ข้อควรพิจารณาด้านประสิทธิภาพ
ใส่นิพจน์ในเครื่องหมายวงเล็บเพื่อให้ได้ความเร็วที่ดีที่สุดและข้อกำหนดในการจัดเก็บข้อมูลที่เล็กที่สุด ซึ่งจะช่วยให้คอมไพเลอร์ bytecode Tcl สร้างรหัสที่ดีที่สุด
ดังกล่าวข้างต้นการแสดงออกจะถูกแทนที่สองครั้ง: ครั้งโดย parser Tcl และครั้งโดย expr คำสั่ง ตัวอย่างเช่นคำสั่ง
ตั้งค่า 3 ตั้งค่า b {$ a + 2} expr $ b * 4
return 11 ไม่ใช่ multiple ของ 4 เนื่องจากตัวแบ่งส่วน Tcl จะถูกแทนที่ก่อน$ a + 2 สำหรับตัวแปรข, แล้วexpr คำสั่งจะประเมินการแสดงออก$ a + 2 * 4.
การแสดงออกส่วนใหญ่ไม่จำเป็นต้องใช้การแทนที่สอง ไม่ว่าจะเป็นวงเล็บปีกกาหรือถ้าไม่มีตัวแปรและคำสั่งแทนจะให้ตัวเลขหรือสตริงที่ไม่จำเป็นต้องใช้ตัวแทน อย่างไรก็ตามเนื่องจากนิพจน์ที่ปราศจากข้อ จำกัด ไม่จำเป็นต้องใช้การแทนที่สองครั้งคอมไพเลอร์ bytecode จะต้องเผยแพร่คำแนะนำเพิ่มเติมเพื่อจัดการกับสถานการณ์นี้ ต้องใช้รหัสที่มีราคาแพงที่สุดสำหรับการแสดงออกที่ไม่ได้ติดตั้งที่มีการแทนที่คำสั่ง นิพจน์เหล่านี้ต้องถูกนำมาใช้โดยการสร้างโค้ดใหม่ทุกครั้งที่นิพจน์ทำงาน
คำสำคัญ
เลขคณิต, แบบบูล, เปรียบเทียบ, การแสดงออก, การเปรียบเทียบเลือน
สำคัญ: ใช้ ชาย คำสั่ง ( % ชาย ) เพื่อดูว่ามีการใช้คำสั่งใดในคอมพิวเตอร์เครื่องใดเครื่องหนึ่งของคุณ