2009-04-12 31 views
9

Tôi mới bắt đầu với SML và tôi đang cố sửa đổi một số mã để tôi hiểu nó đang làm gì (tôi không thể tìm được trình gỡ rối SML/NJ tốt, nhưng đó là một câu hỏi riêng).Làm thế nào để bạn in bên trong một tuyên bố trường hợp trong SML?

fun type_check e theta env non_gens = 
    case e of 
    constant_int _ => (integer,theta) 
    | 
    constant_bool _ => (boolean,theta) 
    | ... 

Giả sử đây là mã hợp lệ trong constant_int là một phần của một kiểu dữ liệu đã kê khai, vv Làm thế nào để tôi thêm một tuyên bố in để nói 'Returning 'integer'' đối với trường hợp? Tôi cố gắng:

... 
constant_int _ => (print "returning integer") (integer,theta) 
... 

Nhưng tôi nhận được:

 
    stdIn:167.22-167.65 Error: operator is not a function [tycon mismatch] 
     operator: unit 
     in expression: 
     (print "returning integer") (integer,theta) 

Tôi nghĩ rằng tôi chỉ không hiểu làm thế nào để thực hiện một chuỗi các câu lệnh, chỉ có người cuối cùng trong số đó phải được coi là giá trị trả về. Lời khuyên nào?

Ngoài ra, làm cách nào tôi có thể in giá trị datatype của riêng mình? SML không thích khi tôi cố gắng chuyển một giá trị datatype vào print() vì vậy tôi có thể phải tạo một hàm in mới cho mỗi kiểu dữ liệu, đúng không?

Trả lời

20

Bạn có thể "thực hiện một chuỗi các câu lệnh, chỉ giá trị cuối cùng trong số đó được coi là giá trị trả về" bằng cách sử dụng dấu chấm phẩy.

... 
constant_int _ => (print "returning integer"; (integer,theta)) 
... 

Trong trường hợp này, chúng tôi cần phải quấn chuỗi các câu lệnh trong ngoặc đơn, bởi vì dấu chấm phẩy có độ ưu tiên thấp hơn so với trường hợp biểu hiện, và vì vậy nếu chúng ta không có dấu ngoặc đơn, nó sẽ nghĩ rằng biểu thức trường hợp kết thúc tại dấu chấm phẩy và rằng toàn bộ biểu thức chữ hoa là một phần của chuỗi, đó không phải là những gì bạn muốn trong trường hợp này.

+0

Bạn không có ý định cao hơn? – Shuzheng

+2

@nlykkei: Không, ý tôi là ưu tiên thấp hơn. Biểu thức trường hợp được nhóm lại đầu tiên bởi vì nó có ưu tiên cao hơn, để lại dấu chấm phẩy, có ưu tiên thấp hơn, là cấu trúc ngoài cùng. – newacct

Các vấn đề liên quan