Org মোড বাবেল - ইন্টারেক্টিভ কোড ব্লক মূল্যায়ন


12

আমি "সিএন" নির্দেশাবলী সম্বলিত সি ++ তে org মোড সোর্স কোড ব্লকগুলিতে মূল্যায়ন করতে চাই তবে মূল্যায়নের সময় আমি ইন্টারেক্টিভ মূল্যায়নের (ব্যবহারকারীর ইনপুট সহ) কোনও উপায় খুঁজে পাচ্ছি না। কোডের উদাহরণ:

#+BEGIN_SRC C++  :results output :export code :tangle myfile.cpp 
#include <iostream>
using namespace std;

int main()
{
int a;
cin>>a;
cout<<a+1;
}
#+END_SRC

এ জাতীয় ইন্টারেক্টিভ মূল্যায়ন করা বা সিমুলেট করা (উত্স কোডটি একটি ভুয়া ইনপুট দিয়ে) অনুকরণ করা কি সম্ভব?


আপনার আসলে এটার ইন্টারেক্টিভ হওয়ার দরকার আছে, বা এই কোড ব্লকটিতে নয়, আপনি কি ইতিমধ্যে আগেই জেনে থাকতে পারেন এমন কিছু ইনপুট দেওয়ার দরকার আছে? দ্বিতীয় কেসটি সহজ: আপনি :var varname=valueশিরোনামে ব্যবহার করতে পারেন । দ্বিতীয় ক্ষেত্রে আপনি এখনও ব্যবহার করতে পারেন :varতবে মানের জায়গায় একটি ইলিস্প ফাংশন সহ অন্য কোড ব্লক ব্যবহার করুন যা ইনপুট চেয়েছে।
wvxvw

আপনার উত্তরের জন্য @Wvxvw ধন্যবাদ; আমি যা করতে চাই তা হ'ল শিক্ষার্থীদের জন্য কিছু প্রোগ্রাম উদাহরণ সহ একটি নথি তৈরি করা এবং তাই আমি উত্স কোডটিকে "যেমন আছে" তে অবরুদ্ধ রাখতে চাই; সুতরাং আমার পছন্দটি আপনি উল্লেখ দ্বিতীয় ক্ষেত্রে হবে; আমি আপনার পরামর্শটি অনুসরণ করার চেষ্টা করব (ব্যবহার করার জন্য: এবং ইনপুট জিজ্ঞাসা করার জন্য একটি এলিস্প কোড), আপনার কি এই জাতীয় কলটির কোনও লিঙ্ক বা উদাহরণ আছে?
Lgen

ওহ, দুঃখিত, কিছুটা ভুল বোঝাবুঝি হয়েছে। দ্বিতীয় উদাহরণটি ইনপুট পড়ার জন্য ইমাক্স ব্যবহার করবে, তবে বাবেল সি ++ প্রোগ্রামকে এমনভাবে কল করবে না যেমন মিথস্ক্রিয়াটিকে অনুমতি দেয়। কেবলমাত্র আমি ভাবতে পারি যে আপনি যদি নিজের কোডটিতে কিছু "পলিমারফিক" ফাংশন যুক্ত করেন, যার দুটি প্রয়োগ রয়েছে: একটি, যেখানে আপনি ইন্টারেক্টিভভাবে ইনপুট পড়েন, এবং অন্যটি, যেখানে আপনি ফাইল থেকে পড়েন বা কোড ব্লক মূল্যায়নের সময় সরবরাহ করেন ।
wvxvw

উত্তর:


8

এটার মত:

#+begin_src C++ :results output :cmdline < in.txt
#include <iostream>
int main(int argc, char *argv[]) {
  int a;
  std::cin >> a;
  std::cout << a + 1;
  return 0;
}

#+end_src

#+RESULTS:
: 11

in.txtওআরগ ফাইলের মতো একই ডিরেক্টরিতে একটি সামগ্রী তৈরি করুন 10


7

আপনি ইমাক্সকে একটি নামকৃত elispব্লক ব্যবহার না করে পরিবর্তিত ইন্টারেক্টিভ ইনপুট পেতে চাইতে পারেন । তারপরে :var c-variable=block-nameসিনট্যাক্সটি ব্যবহার করে সংগ্রহ করা মান সি ++ স্যুস ব্লকে পাস করুন :

#+name: input_block
#+BEGIN_SRC elisp :export none :results none
(completing-read "a=" nil)

#+END_SRC

#+BEGIN_SRC C++  :results output :export code :tangle myfile.cpp :var input=input_block
  #include <stdlib.h>
  #include <iostream>
  using namespace std;

  int main()
  {
  int a = atoi(input);
  cout<<a+1;
  }
#+END_SRC 

নোট করুন যে উত্স ব্লকের আউটপুটগুলি স্ট্রিং হিসাবে প্রায় পাস হয়েছে, সুতরাং আমাদের এটিকে একটি পূর্ণসংখ্যায় রূপান্তর করতে হবে, সুতরাং atoiএবং অতিরিক্তটি #include


1
আপনার পছন্দ মত করুন। তবে, আপনার কোডটি অর্গ-মোডের সাথে আবদ্ধ, যখন আমার অনুলিপিটি কপি-পেস্ট করা যায় এবং সহজেই সংকলিত হতে পারে।
Abo-abo

1
এই অবদানের জন্য @ ইরিকস্ট্রোককে ধন্যবাদ; আমার অনুরূপ ধারণা ছিল (একটি বাহ্যিক ব্লক ব্যবহার করুন) এবং অ্যাবো-অ্যাবো সমাধানের সাথে একটি মিশ্রণ তৈরি করেছি। আমি উত্তর হিসাবে ফলাফল পোস্ট।
Lgen

4

আপনার সহায়তার জন্য @ আবো-আবো ধন্যবাদ আমি আপনার পরামর্শটি অনুসরণ করেছি যা সঠিক এবং এমনকি এটি কেবলমাত্র আমার org ফাইল সম্পাদনা করতে (এবং স্বয়ংক্রিয়ভাবে বাহ্যিক ইনপুট ফাইল তৈরি করতে) এটিকে কিছুটা বাড়িয়ে তুলেছে। ধারণা একটি বহিস্থিত কোড ব্লক (এখানে একটি ব্যাশ স্ক্রিপ্ট নামে build_input_file) যা ডেটা ফাইল তৈরি করে এবং অন্যান্য ব্লক ধন্যবাদ মূল্যায়নের আগে স্বয়ংক্রিয়ভাবে একে ডাকতে তৈরি করা :var tmp=build_input_file

#+name: build_input_file
#+BEGIN_SRC bash  :results none :exports none 
echo "10 12" > in.txt
#+END_SRC

#+name: my_function_with_cin
#+BEGIN_SRC C++  :results output :exports both  :var tmp=build_input_file :cmdline < in.txt
#include <iostream>
using namespace std;

int main()
{
 int a,b;
 cin>>a>>b;
 cout<<a<<" "<<b;
}
#+END_SRC
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.