src/HOL/Tools/res_lib.ML
author haftmann
Sat, 04 Jun 2005 21:43:55 +0200
changeset 16240 95cc0e8f8a17
parent 15774 9df37a0e935d
child 16515 7896ea4f3a87
permissions -rw-r--r--
added shellcmd style
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15604
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
     1
(*  Title:      HOL/Tools/res_lib.ML
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
     2
    Author:     Jia Meng, Cambridge University Computer Laboratory
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
     3
    ID:         $Id$
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
     4
    Copyright   2004 University of Cambridge
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     5
15604
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
     6
Some auxiliary functions frequently used by files in this directory.
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     7
*)
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     8
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     9
signature RES_LIB =
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    10
sig
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    11
15604
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    12
	val flat_noDup : ''a list list -> ''a list
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    13
	val list2str_sep : string -> string list -> string
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    14
	val list_to_string : string list -> string
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    15
	val list_to_string' : string list -> string
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    16
	val no_BDD : string -> string
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    17
	val no_blanks : string -> string
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    18
	val no_blanks_dots : string -> string
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    19
	val no_blanks_dots_dashes : string -> string
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    20
	val no_dots : string -> string
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    21
	val no_rep_add : ''a -> ''a list -> ''a list
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    22
	val no_rep_app : ''a list -> ''a list -> ''a list
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    23
	val pair_ins : 'a -> 'b list -> ('a * 'b) list
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    24
	val rm_rep : ''a list -> ''a list
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    25
	val write_strs : TextIO.outstream -> TextIO.vector list -> unit
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    26
	val writeln_strs : TextIO.outstream -> TextIO.vector list -> unit
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    27
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    28
end;
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    29
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    30
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    31
structure ResLib : RES_LIB =
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    32
struct
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    33
15604
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    34
	(* convert a list of strings into one single string; surrounded by brackets *)
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    35
	fun list_to_string strings =
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    36
	let
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    37
		fun str_of [s]      = s
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    38
		  | str_of (s1::ss) = s1 ^ "," ^ (str_of ss)
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    39
		  | str_of _        = ""
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    40
	in
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    41
		"(" ^ str_of strings ^ ")"
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    42
	end;
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    43
15604
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    44
	fun list_to_string' strings =
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    45
	let
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    46
		fun str_of [s]      = s
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    47
		  | str_of (s1::ss) = s1 ^ "," ^ (str_of ss)
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    48
		  | str_of _        = ""
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    49
	in
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    50
		"[" ^ str_of strings ^ "]"
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    51
	end;
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    52
15604
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    53
	(* remove some chars (not allowed by TPTP format) from a string *)
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    54
	fun no_blanks " " = "_"
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    55
	  | no_blanks c   = c;
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    56
15604
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    57
	fun no_dots "." = "_dot_"
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    58
	  | no_dots c   = c;
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    59
15604
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    60
	fun no_blanks_dots " " = "_"
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    61
	  | no_blanks_dots "." = "_dot_"
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    62
	  | no_blanks_dots c   = c;
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    63
15604
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    64
	fun no_blanks_dots_dashes " " = "_"
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    65
	  | no_blanks_dots_dashes "." = "_dot_"
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    66
	  | no_blanks_dots_dashes "'" = "_da_"
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    67
	  | no_blanks_dots_dashes c   = c;
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    68
15604
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    69
	fun no_BDD cs =
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    70
		implode (map no_blanks_dots_dashes (explode cs));
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    71
15604
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    72
	fun no_rep_add x []     = [x]
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    73
	  | no_rep_add x (y::z) = if x=y then y::z else y::(no_rep_add x z);
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    74
15604
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    75
	fun no_rep_app l1 []     = l1
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    76
	  | no_rep_app l1 (x::y) = no_rep_app (no_rep_add x l1) y;
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    77
15604
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    78
	fun rm_rep []     = []
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    79
	  | rm_rep (x::y) = if x mem y then rm_rep y else x::(rm_rep y);
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    80
15604
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    81
	fun flat_noDup []     = []
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    82
	  | flat_noDup (x::y) = no_rep_app x (flat_noDup y);
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    83
15604
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    84
	fun list2str_sep delim []      = delim
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    85
	  | list2str_sep delim (s::ss) = (s ^ delim) ^ (list2str_sep delim ss);
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    86
15604
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    87
	fun write_strs _   []      = ()
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    88
	  | write_strs out (s::ss) = (TextIO.output (out, s); write_strs out ss);
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    89
15604
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    90
	fun writeln_strs _   []      = ()
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    91
	  | writeln_strs out (s::ss) = (TextIO.output (out, s); TextIO.output (out, "\n"); writeln_strs out ss);
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    92
15604
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    93
	(* pair the first argument with each element in the second input list *)
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    94
	fun pair_ins x []      = []
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    95
	  | pair_ins x (y::ys) = (x, y) :: (pair_ins x ys);
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    96
15604
6fb06b768f67 code reformatted
webertj
parents: 15347
diff changeset
    97
end;