jamhed (jamhed) wrote in ru_lisp,
jamhed
jamhed
ru_lisp

Сводный псто.

В помощь выбирающему языг:

задан список файлов в командной строке, надо вывести последовательно
1-ю строку из 1-го файла
1-ю строку из 2-го файла
1-ю строку из 3-го файла
...
1-ю строку из N-го файла
2-ю строку из 1-го файла
2-ю строку из 2-го файла
2-ю строку из 3-го файла
...
2-ю строку из N-го файла

ну и так далее, причем количество строк в файлах разное



Haskell:
import System
import Data.List
main = getArgs >>= mapM readFile >>= mapM_ putStrLn . concat . transpose . map (lines)


Perl:
my @fs = map { open(my $fh, $_); $fh } @ARGV;
while( my @fh = grep { not eof($_) } @fs ) { print my $f = readline($_) foreach (@fh) };


Ruby:
fs = ARGV.map { |fn| File.open(fn) }
while fs.map(&:eof?).include? false
   fs.each { |f| puts f.gets unless f.eof? }
end


LISP
(let ((files (mapcar #'open *args*)))                                                
  (loop                                               
    (unless (mapcan (lambda (f &aux (x (read-line f nil)))
                         (when x
                            (format t "~A~%" x) (list x)))
                    files)
	   (return))))


C++
#include 
#include 
#include 
#include 
#include 
using namespace std;

int __cdecl main(int argc, char *argv[]) {
	vector files(argc-1);
	for (int i=1; i<argc; ++i)
		files[i-1].open(argv[i]);
	for (bool hasLine=true; hasLine;) {
		hasLine = false;
		for (size_t i=0; i<files.size(); ++i) {
			string line;
			if (getline(files[i], line)) {
				hasLine = true;
				cout << line << endl;
			}
		}
	}
	return 0;
}


Erlang
компиляция erlc a.erl
запуск: erl -noshell -s a start -- file file1 file2 file3 

-module(a).
-export([start/0]).

start() ->
  output([ FD || {ok, FD} <- [ file:open(X, read) || X <- init:get_plain_arguments() ]]),
  erlang:halt().

output([]) -> ok;
output(List) ->
output(lists:filter(
fun(FD) ->
case io:get_line(FD, "") of
Line when is_list(Line) ->
io:format(Line), true;
_ -> false
end
end,
List
)
).


C#
static void Main(string[] args) {
	for (var files = args.Select(a => new StreamReader(a)).ToList(); 0 < files.Select(f => f.ReadLine()).Where(line => line != null).Count(line => { Console.WriteLine(line); 				return true; }); );
}


Java
package example.io;

import static net.sourceforge.jfunctions.functions.FunctionToolkit.*;
import static net.sourceforge.jfunctions.io.IOToolkit.file;
import static net.sourceforge.jfunctions.structures.StructureToolkit.list;
import net.sourceforge.jfunctions.io.FileLineParser;

public class SortLinesExample {
	
	public static void main(String[] args) {
		for (String line : merge(transform(transform(list(args), file()), FileLineParser.ignoringErrors()))) {
			System.out.println(line);
		}
	}
	
}


Python
import sys  
from itertools import izip_longest as izip, chain, ifilter

def main(args):
    for str in ifilter(lambda x: x is not None,
                       chain.from_iterable( izip( *[open(a) for a in args)] ) ):
        print str.rstrip()

if __name__=='__main__':
    main(sys.argv[1:])   


OCaml
open ExtLib
open List
let (>>) f g x = g (f x)
let (|>) x f = f x;;

let fs = Array.to_list Sys.argv |> tl |> map (open_in >> Std.input_lines) in
while fold_left (fun go e -> Option.may print_endline (Enum.get e); go || not (Enum.is_empty e)) false fs do () done


Subscribe

  • определение контуров предметов на видео

    Я дико извиняюсь, могу ошибаться, но три-пять лет назад в ЖЖке пробегал пост от лисповода, в котором товарищ демонстрировал как можно просто без…

  • парочка вопросов

    В процессе изучения Лиспа натыкаюсь на некоторые моменты, с которыми пока не могу разобраться. 1) sbcl & nunion Введём такой простой код в repl…

  • group

    Доброго времени суток. Нужна была функция, которая группирует список группами по несколько элементов. Получился не совсем красивый велосипед. Никто…

  • Post a new comment

    Error

    default userpic
    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 18 comments

  • определение контуров предметов на видео

    Я дико извиняюсь, могу ошибаться, но три-пять лет назад в ЖЖке пробегал пост от лисповода, в котором товарищ демонстрировал как можно просто без…

  • парочка вопросов

    В процессе изучения Лиспа натыкаюсь на некоторые моменты, с которыми пока не могу разобраться. 1) sbcl & nunion Введём такой простой код в repl…

  • group

    Доброго времени суток. Нужна была функция, которая группирует список группами по несколько элементов. Получился не совсем красивый велосипед. Никто…