private static Atom ReadDirectory(Atom args, Context context) { Atom path = args?.atom; if (path == null || !path.IsString()) { throw new ArgumentException("Path must be string!"); } string directory = (string)path.value; Atom pattern = args?.next?.atom; Atom mode = args?.next?.next?.atom; SearchOption option = ArgUtils.GetEnum <SearchOption>( mode, 3); string[] dirs = null; if (pattern == null) { dirs = Directory.GetDirectories(directory); } else { dirs = Directory.GetDirectories(directory, (string)pattern.value, option); } string[] files = null; if (pattern == null) { files = Directory.GetFiles(directory); } else { files = Directory.GetFiles(directory, (string)pattern.value, option); } Atom[] elements = new Atom[dirs.Length + files.Length]; for (int i = 0; i < dirs.Length; i++) { elements[i] = new Atom(AtomType.String, dirs[i]); } for (int i = 0; i < files.Length; i++) { elements[i + dirs.Length] = new Atom(AtomType.String, files[i]); } return(Atom.List(elements)); }