写入后读取* standard-input * Common Lisp

时间:2016-02-02 17:41:15

标签: stream lisp common-lisp fifo

这是一个非常简单的问题。我正在尝试解决HackerRank问题,但是我不能完全理解如何写入* standard-input *以便在我的计算机上运行代码。

它要求在给定数组长度(N)的情况下对数组求和,然后将数组本身全部放在* standard-input *上。

Hackerranks使用* standard-input *来给出值,如果我可以在输入中存储值然后读取它们,那将是最简单的。

我的问题是如何写入* standard-input *?这样可以更轻松地在我的计算机上工作,而不是在云中工作。

2 个答案:

答案 0 :(得分:5)

使用with-input-from-string

(with-input-from-string (s "4 3 2")
  (let ((a (read s))
        (b (read s))
        (c (read s)))
    (format t "~a, ~a, ~a~%" a b c))) 

您也可以只读取文件,但是从字符串中读取更容易进行不同的测试用例。

答案 1 :(得分:2)

Pure Common Lisp不提供流,您可以轻松写入,缓冲输出并将其读回。 Pure Common Lisp也不提供可扩展的流。但是有一个名为 grey streams 的扩展名(由David N. Gray提出为ANSI CL问题https://github.com/Sirsirious/SPDMap),它允许使用fifo缓冲区实现管道流。

管道示例:STREAM-DEFINITION-BY-USER